From 883db3cdf254810c6a11025ac63b941b90230252 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Fri, 13 Dec 2019 08:22:59 +0100 Subject: [PATCH 01/31] Update shapes.py BRepBuilderAPI_MakeWire::Add(const TopTools_ListOfShape & L) offers the option to accept a list of shapes directly as argument: "Adds the edges of to the current wire. The edges are not to be consecutive. But they are to be all connected geometrically or topologically. If some of them are not connected the Status give DisconnectedWire but the "Maker" is Done() and you can get the partial result. (ie connected to the first edgeof the list )" Following this I modified the assembledEdges in shapes.py to be able to provide a list of unordered edges to BRepBuilderAPI_MakeWire. This way, when the list of edges is generated by another function, there is not need to make them consecutive. --- cadquery/occ_impl/shapes.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cadquery/occ_impl/shapes.py b/cadquery/occ_impl/shapes.py index 4adcacf4..092a5734 100644 --- a/cadquery/occ_impl/shapes.py +++ b/cadquery/occ_impl/shapes.py @@ -809,12 +809,15 @@ class Wire(Shape, Mixin1D): """ Attempts to build a wire that consists of the edges in the provided list :param cls: - :param listOfEdges: a list of Edge objects + :param listOfEdges: a list of Edge objects. The edges are not to be consecutive. :return: a wire with the edges assembled """ + wire_builder = BRepBuilderAPI_MakeWire() - for edge in listOfEdges: - wire_builder.Add(edge.wrapped) + edges_list = TopTools_ListOfShape() + for e in listOfEdges: + edges_list.Append(e.wrapped) + wire_builder.Add(edges_list) return cls(wire_builder.Wire()) From 46c237581905d86d82e0c28d4328cc555f1027ec Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sun, 15 Dec 2019 09:12:06 +0100 Subject: [PATCH 02/31] Update shapes.py --- cadquery/occ_impl/shapes.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cadquery/occ_impl/shapes.py b/cadquery/occ_impl/shapes.py index 092a5734..5a8b2e33 100644 --- a/cadquery/occ_impl/shapes.py +++ b/cadquery/occ_impl/shapes.py @@ -112,6 +112,7 @@ from OCC.Core.BRepClass3d import BRepClass3d_SolidClassifier from math import pi, sqrt from functools import reduce +import warnings TOLERANCE = 1e-6 DEG2RAD = 2 * pi / 360. @@ -818,6 +819,11 @@ class Wire(Shape, Mixin1D): for e in listOfEdges: edges_list.Append(e.wrapped) wire_builder.Add(edges_list) + if not wire_builder.IsDone(): + w1 = 'BRepBuilderAPI_MakeWire::IsDone(): returns the construction status. BRepBuilderAPI_WireDone if the wire is built, or another value of the BRepBuilderAPI_WireError enumeration indicating why the construction failed = '+ str(wire_builder.IsDone()) + w2 = 'BRepBuilderAPI_MakeWire::Error(): returns true if this algorithm contains a valid wire. IsDone returns false if: there are no edges in the wire, or the last edge which you tried to add was not connectable = ' + str(wire_builder.Error()) + warnings.warn(w1) + warnings.warn(w2) return cls(wire_builder.Wire()) From 23f2ba679f69e2c15ab8b87dcda9b1efedf00442 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sun, 15 Dec 2019 09:26:59 +0100 Subject: [PATCH 03/31] Update shapes.py --- cadquery/occ_impl/shapes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cadquery/occ_impl/shapes.py b/cadquery/occ_impl/shapes.py index 5a8b2e33..487391f4 100644 --- a/cadquery/occ_impl/shapes.py +++ b/cadquery/occ_impl/shapes.py @@ -825,7 +825,7 @@ class Wire(Shape, Mixin1D): warnings.warn(w1) warnings.warn(w2) - return cls(wire_builder.Wire()) + return cls(wire_builder.Wire()) @classmethod def makeCircle(cls, radius, center, normal): From b19b8ff541f665f61a57fcdd4c6cb72bb3a7fcdd Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sun, 15 Dec 2019 09:38:56 +0100 Subject: [PATCH 04/31] Update shapes.py --- cadquery/occ_impl/shapes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cadquery/occ_impl/shapes.py b/cadquery/occ_impl/shapes.py index 487391f4..5a8b2e33 100644 --- a/cadquery/occ_impl/shapes.py +++ b/cadquery/occ_impl/shapes.py @@ -825,7 +825,7 @@ class Wire(Shape, Mixin1D): warnings.warn(w1) warnings.warn(w2) - return cls(wire_builder.Wire()) + return cls(wire_builder.Wire()) @classmethod def makeCircle(cls, radius, center, normal): From a7ca48e34e16ab75f3abe1ccb0b91bb00d067bb8 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sun, 15 Dec 2019 18:30:03 +0100 Subject: [PATCH 05/31] Add files via upload --- tests/TestAssembleEdgesWarnings.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 tests/TestAssembleEdgesWarnings.py diff --git a/tests/TestAssembleEdgesWarnings.py b/tests/TestAssembleEdgesWarnings.py new file mode 100644 index 00000000..d2efda02 --- /dev/null +++ b/tests/TestAssembleEdgesWarnings.py @@ -0,0 +1,19 @@ +""" + Tests assembleEdges warnings functionality +""" + +import cadquery as cq + +class TestAssembleEdgesWarning(BaseTest): + + def plate(self): + + # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides + thickness = 0.1 + edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] + edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) + edge_wire = edge_wire.add(cq.Workplane('XY').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) # Triggers BRepBuilderAPI_MakeWire error + surface_points = [[-3.,-3.,-3.], [3.,3.,3.]] + plate_1 = cq.Workplane('XY').interpPlate(surface_points, edge_wire, thickness) + + return plate_1 From fd1e959aa7d1448e540917d87918239247eaaf43 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sun, 15 Dec 2019 18:31:40 +0100 Subject: [PATCH 06/31] Update shapes.py --- cadquery/occ_impl/shapes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cadquery/occ_impl/shapes.py b/cadquery/occ_impl/shapes.py index 5a8b2e33..946c8843 100644 --- a/cadquery/occ_impl/shapes.py +++ b/cadquery/occ_impl/shapes.py @@ -819,9 +819,9 @@ class Wire(Shape, Mixin1D): for e in listOfEdges: edges_list.Append(e.wrapped) wire_builder.Add(edges_list) - if not wire_builder.IsDone(): - w1 = 'BRepBuilderAPI_MakeWire::IsDone(): returns the construction status. BRepBuilderAPI_WireDone if the wire is built, or another value of the BRepBuilderAPI_WireError enumeration indicating why the construction failed = '+ str(wire_builder.IsDone()) - w2 = 'BRepBuilderAPI_MakeWire::Error(): returns true if this algorithm contains a valid wire. IsDone returns false if: there are no edges in the wire, or the last edge which you tried to add was not connectable = ' + str(wire_builder.Error()) + if wire_builder.Error(): + w1 = 'BRepBuilderAPI_MakeWire::IsDone(): returns true if this algorithm contains a valid wire. IsDone returns false if: there are no edges in the wire, or the last edge which you tried to add was not connectable = '+ str(wire_builder.IsDone()) + w2 = 'BRepBuilderAPI_MakeWire::Error(): returns the construction status. BRepBuilderAPI_WireDone if the wire is built, or another value of the BRepBuilderAPI_WireError enumeration indicating why the construction failed = ' + str(wire_builder.Error()) warnings.warn(w1) warnings.warn(w2) From 80b93dadc5cfc85b45d6fd83961c8dd5c535dfea Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 16 Dec 2019 08:45:28 +0100 Subject: [PATCH 07/31] Update TestAssembleEdgesWarnings.py --- tests/TestAssembleEdgesWarnings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/TestAssembleEdgesWarnings.py b/tests/TestAssembleEdgesWarnings.py index d2efda02..e4244739 100644 --- a/tests/TestAssembleEdgesWarnings.py +++ b/tests/TestAssembleEdgesWarnings.py @@ -12,8 +12,8 @@ class TestAssembleEdgesWarning(BaseTest): thickness = 0.1 edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) - edge_wire = edge_wire.add(cq.Workplane('XY').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) # Triggers BRepBuilderAPI_MakeWire error - surface_points = [[-3.,-3.,-3.], [3.,3.,3.]] - plate_1 = cq.Workplane('XY').interpPlate(surface_points, edge_wire, thickness) + edge_wire = edge_wire.add(cq.Workplane('XY').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) # Triggers BRepBuilderAPI_MakeWire error ('YZ' is correct) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) - return plate_1 + return edge_wire From fc4e9218488bdb5fff90a5c328ac562ad995e3ca Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sat, 21 Dec 2019 16:29:00 +0100 Subject: [PATCH 08/31] Add files via upload --- tests/TestInterpPlate.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/TestInterpPlate.py diff --git a/tests/TestInterpPlate.py b/tests/TestInterpPlate.py new file mode 100644 index 00000000..b32e9427 --- /dev/null +++ b/tests/TestInterpPlate.py @@ -0,0 +1,16 @@ +""" + Tests interpPlate functionality +""" + +import cadquery as cq + +class TestinterpPlate(BaseTest): + + def plate(self): + # example from PythonOCC core_geometry_geomplate.py, use of thickness = 0 returns 2D surface. + thickness = 0 + edge_points = [[0.,0.,0.], [0.,10.,0.], [0.,10.,10.], [0.,0.,10.]] + surface_points = [[5.,5.,5.]] + plate_0 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness) + + return plate_0 From 5765e24d95c207a877ad237d3bb7da0b7bbbccc6 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sat, 21 Dec 2019 16:29:34 +0100 Subject: [PATCH 09/31] Add files via upload --- examples/Ex101_InterpPlate.py | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 examples/Ex101_InterpPlate.py diff --git a/examples/Ex101_InterpPlate.py b/examples/Ex101_InterpPlate.py new file mode 100644 index 00000000..f838f6be --- /dev/null +++ b/examples/Ex101_InterpPlate.py @@ -0,0 +1,86 @@ +import numpy as np +from numpy import sin, cos, pi, sqrt +import cadquery as cq + +# TEST_1 +# example from PythonOCC core_geometry_geomplate.py, use of thickness = 0 returns 2D surface. +thickness = 0 +edge_points = [[0.,0.,0.], [0.,10.,0.], [0.,10.,10.], [0.,0.,10.]] +surface_points = [[5.,5.,5.]] +plate_0 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness) +plate_0 = plate_0.translate((0,6*12,0)) +show_object(plate_0) + +# EXAMPLE 1 +# Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides +thickness = 0.1 +edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] +edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) +#edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).polyline([(-7.,0.), (3,-3), (7.,0.)])) +edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) +surface_points = [[-3.,-3.,-3.], [3.,3.,3.]] +plate_1 = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness) +#plate_1 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness) # list of (x,y,z) points instead of wires for edges +show_object(plate_1) + +# EXAMPLE 2 +# Embossed star, need to change optional parameters to obtain nice looking result. +r1=3. +r2=10. +fn=6 +thickness = 0.1 +edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] +edge_wire = cq.Workplane('XY').polyline(edge_points) +r2=4.5 +surface_points = [[r2*cos(i * pi/fn), r2*sin(i * pi/fn), 1.] for i in range(2*fn)] + [[0.,0.,-2.]] +plate_2 = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness, combine=True, clean=True, Degree=3, NbPtsOnCur=15, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=49) +#plate_2 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness, combine=True, clean=True, Degree=3, NbPtsOnCur=15, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=49) # list of (x,y,z) points instead of wires for edges +plate_2 = plate_2.translate((0,2*12,0)) +show_object(plate_2) + +# EXAMPLE 3 +# Points on hexagonal pattern coordinates, use of pushpoints. +r1 = 1. +N = 3 +ca = cos(30. * pi/180.) +sa = sin(30. * pi/180.) +# EVEN ROWS +x_p = np.arange(-N*r1, N*r1, ca*2*r1) +y_p = np.arange(-N*r1, N*r1, 3*r1) +x_p, y_p = np.meshgrid(x_p, y_p) +xy_p_even = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] +print("xy_p_even = ", xy_p_even) +# ODD ROWS +x_p = np.arange(-(N-0.5)*r1*ca, (N+1.5)*r1*ca, ca*2*r1) +y_p = np.arange(-(N-2+sa)*r1, (N+1+sa)*r1, 3*r1) +x_p, y_p = np.meshgrid(x_p, y_p) +xy_p_odd = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] +pts = xy_p_even + xy_p_odd +# Spike surface +thickness = 0.1 +fn = 6 +edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] +surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] +edge_wire = cq.Workplane('XY').polyline(edge_points) +be = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness, combine=True, clean=True, Degree=2, NbPtsOnCur=20, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=9) +#be = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness, combine=True, clean=True, Degree=2, NbPtsOnCur=20, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=9) # list of (x,y,z) points instead of wires for edges +# Pattern on sphere +def face(pos): # If pushpoints is used directly with interpPlate --> crash! Use with each() + return be.rotate((0,0,0),(0,0,1), 30).translate(pos).val() +plate_3 = cq.Workplane('XY').pushPoints(pts).each(face) +plate_3 = plate_3.translate((0,4*11,0)) +show_object(plate_3) + +# EXAMPLE 4 +# Gyroïd, all edges are splines on different workplanes. +thickness = 0.1 +edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] +plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] +offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] +edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) +for i in range(len(edge_points)-1): + edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) +surface_points = [[0,0,0]] +plate_4 = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness) +plate_4 = plate_4.translate((0,5*12,0)) +show_object(plate_4) From ef49b6faad204a10cfa14daced59bd0d8f8c50b4 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sat, 21 Dec 2019 16:32:40 +0100 Subject: [PATCH 10/31] Delete TestInterpPlate.py --- tests/TestInterpPlate.py | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 tests/TestInterpPlate.py diff --git a/tests/TestInterpPlate.py b/tests/TestInterpPlate.py deleted file mode 100644 index b32e9427..00000000 --- a/tests/TestInterpPlate.py +++ /dev/null @@ -1,16 +0,0 @@ -""" - Tests interpPlate functionality -""" - -import cadquery as cq - -class TestinterpPlate(BaseTest): - - def plate(self): - # example from PythonOCC core_geometry_geomplate.py, use of thickness = 0 returns 2D surface. - thickness = 0 - edge_points = [[0.,0.,0.], [0.,10.,0.], [0.,10.,10.], [0.,0.,10.]] - surface_points = [[5.,5.,5.]] - plate_0 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness) - - return plate_0 From d9893eb7f7d08ac1c81dbf1d618aed7db420d3c1 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Sat, 21 Dec 2019 16:33:04 +0100 Subject: [PATCH 11/31] Delete Ex101_InterpPlate.py --- examples/Ex101_InterpPlate.py | 86 ----------------------------------- 1 file changed, 86 deletions(-) delete mode 100644 examples/Ex101_InterpPlate.py diff --git a/examples/Ex101_InterpPlate.py b/examples/Ex101_InterpPlate.py deleted file mode 100644 index f838f6be..00000000 --- a/examples/Ex101_InterpPlate.py +++ /dev/null @@ -1,86 +0,0 @@ -import numpy as np -from numpy import sin, cos, pi, sqrt -import cadquery as cq - -# TEST_1 -# example from PythonOCC core_geometry_geomplate.py, use of thickness = 0 returns 2D surface. -thickness = 0 -edge_points = [[0.,0.,0.], [0.,10.,0.], [0.,10.,10.], [0.,0.,10.]] -surface_points = [[5.,5.,5.]] -plate_0 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness) -plate_0 = plate_0.translate((0,6*12,0)) -show_object(plate_0) - -# EXAMPLE 1 -# Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides -thickness = 0.1 -edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] -edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) -#edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).polyline([(-7.,0.), (3,-3), (7.,0.)])) -edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) -surface_points = [[-3.,-3.,-3.], [3.,3.,3.]] -plate_1 = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness) -#plate_1 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness) # list of (x,y,z) points instead of wires for edges -show_object(plate_1) - -# EXAMPLE 2 -# Embossed star, need to change optional parameters to obtain nice looking result. -r1=3. -r2=10. -fn=6 -thickness = 0.1 -edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] -edge_wire = cq.Workplane('XY').polyline(edge_points) -r2=4.5 -surface_points = [[r2*cos(i * pi/fn), r2*sin(i * pi/fn), 1.] for i in range(2*fn)] + [[0.,0.,-2.]] -plate_2 = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness, combine=True, clean=True, Degree=3, NbPtsOnCur=15, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=49) -#plate_2 = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness, combine=True, clean=True, Degree=3, NbPtsOnCur=15, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=49) # list of (x,y,z) points instead of wires for edges -plate_2 = plate_2.translate((0,2*12,0)) -show_object(plate_2) - -# EXAMPLE 3 -# Points on hexagonal pattern coordinates, use of pushpoints. -r1 = 1. -N = 3 -ca = cos(30. * pi/180.) -sa = sin(30. * pi/180.) -# EVEN ROWS -x_p = np.arange(-N*r1, N*r1, ca*2*r1) -y_p = np.arange(-N*r1, N*r1, 3*r1) -x_p, y_p = np.meshgrid(x_p, y_p) -xy_p_even = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] -print("xy_p_even = ", xy_p_even) -# ODD ROWS -x_p = np.arange(-(N-0.5)*r1*ca, (N+1.5)*r1*ca, ca*2*r1) -y_p = np.arange(-(N-2+sa)*r1, (N+1+sa)*r1, 3*r1) -x_p, y_p = np.meshgrid(x_p, y_p) -xy_p_odd = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] -pts = xy_p_even + xy_p_odd -# Spike surface -thickness = 0.1 -fn = 6 -edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] -surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] -edge_wire = cq.Workplane('XY').polyline(edge_points) -be = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness, combine=True, clean=True, Degree=2, NbPtsOnCur=20, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=9) -#be = cq.Workplane('XY').interpPlate(edge_points, surface_points, thickness, combine=True, clean=True, Degree=2, NbPtsOnCur=20, NbIter=2, Anisotropie=False, Tol2d=0.00001, Tol3d=0.0001, TolAng=0.01, TolCurv=0.1, MaxDeg=8, MaxSegments=9) # list of (x,y,z) points instead of wires for edges -# Pattern on sphere -def face(pos): # If pushpoints is used directly with interpPlate --> crash! Use with each() - return be.rotate((0,0,0),(0,0,1), 30).translate(pos).val() -plate_3 = cq.Workplane('XY').pushPoints(pts).each(face) -plate_3 = plate_3.translate((0,4*11,0)) -show_object(plate_3) - -# EXAMPLE 4 -# Gyroïd, all edges are splines on different workplanes. -thickness = 0.1 -edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] -plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] -offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] -edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) -for i in range(len(edge_points)-1): - edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) -surface_points = [[0,0,0]] -plate_4 = cq.Workplane('XY').interpPlate(edge_wire, surface_points, thickness) -plate_4 = plate_4.translate((0,5*12,0)) -show_object(plate_4) From f9eeb128779e5709280482a21593ba89ab42b5be Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 23 Dec 2019 14:24:05 +0100 Subject: [PATCH 12/31] Delete TestAssembleEdgesWarnings.py --- tests/TestAssembleEdgesWarnings.py | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 tests/TestAssembleEdgesWarnings.py diff --git a/tests/TestAssembleEdgesWarnings.py b/tests/TestAssembleEdgesWarnings.py deleted file mode 100644 index e4244739..00000000 --- a/tests/TestAssembleEdgesWarnings.py +++ /dev/null @@ -1,19 +0,0 @@ -""" - Tests assembleEdges warnings functionality -""" - -import cadquery as cq - -class TestAssembleEdgesWarning(BaseTest): - - def plate(self): - - # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides - thickness = 0.1 - edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] - edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) - edge_wire = edge_wire.add(cq.Workplane('XY').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) # Triggers BRepBuilderAPI_MakeWire error ('YZ' is correct) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - return edge_wire From bb2eb064ef14fd45ab70e85e3eb75e358c8f48ca Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 23 Dec 2019 14:24:36 +0100 Subject: [PATCH 13/31] Add files via upload --- tests/TestAssembleEdges.py | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/TestAssembleEdges.py diff --git a/tests/TestAssembleEdges.py b/tests/TestAssembleEdges.py new file mode 100644 index 00000000..00e7e38f --- /dev/null +++ b/tests/TestAssembleEdges.py @@ -0,0 +1,78 @@ +""" + Tests interpPlate functionality +""" + +import cadquery as cq + +class TestAssembleEdges(BaseTest): + + def edge_wire_1(self): + # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides + thickness = 0.1 + edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] + edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) + edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + return edge_wire + + + def edge_wire_2(self): + # Embossed star, need to change optional parameters to obtain nice looking result. + r1=3. + r2=10. + fn=6 + thickness = 0.1 + edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] + edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + return edge_wire + + + def edge_wire_3(self): + # Points on hexagonal pattern coordinates, use of pushpoints. + r1 = 1. + N = 3 + ca = cos(30. * pi/180.) + sa = sin(30. * pi/180.) + # EVEN ROWS + x_p = np.arange(-N*r1, N*r1, ca*2*r1) + y_p = np.arange(-N*r1, N*r1, 3*r1) + x_p, y_p = np.meshgrid(x_p, y_p) + xy_p_even = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] + # ODD ROWS + x_p = np.arange(-(N-0.5)*r1*ca, (N+1.5)*r1*ca, ca*2*r1) + y_p = np.arange(-(N-2+sa)*r1, (N+1+sa)*r1, 3*r1) + x_p, y_p = np.meshgrid(x_p, y_p) + xy_p_odd = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] + pts = xy_p_even + xy_p_odd + # Spike surface + thickness = 0.1 + fn = 6 + edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] + surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] + edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + return edge_wire + + + def edge_wire_4(self): + # Gyroïd, all edges are splines on different workplanes. + thickness = 0.1 + edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] + plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] + offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] + edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) + for i in range(len(edge_points)-1): + edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + return edge_wire + + From 9b2c8da425e332706dfad80a9c00338b2c00a00f Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 23 Dec 2019 15:18:50 +0100 Subject: [PATCH 14/31] Update TestAssembleEdges.py --- tests/TestAssembleEdges.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestAssembleEdges.py b/tests/TestAssembleEdges.py index 00e7e38f..b1d0fac3 100644 --- a/tests/TestAssembleEdges.py +++ b/tests/TestAssembleEdges.py @@ -1,5 +1,5 @@ """ - Tests interpPlate functionality + Tests AssembleEdges functionality """ import cadquery as cq From 57c4c9924849b39e850c16785695f6e8f213835f Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 23 Dec 2019 15:22:07 +0100 Subject: [PATCH 15/31] Update TestAssembleEdges.py --- tests/TestAssembleEdges.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/TestAssembleEdges.py b/tests/TestAssembleEdges.py index b1d0fac3..838a797c 100644 --- a/tests/TestAssembleEdges.py +++ b/tests/TestAssembleEdges.py @@ -3,6 +3,7 @@ """ import cadquery as cq +from tests import BaseTest class TestAssembleEdges(BaseTest): From 84775d4973f9d6450573b98d2f58dd7e9abc097c Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 23 Dec 2019 15:25:42 +0100 Subject: [PATCH 16/31] Add files via upload --- tests/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/__init__.py b/tests/__init__.py index bae4439d..2c0ca15d 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -59,4 +59,5 @@ __all__ = [ 'TestImporters', 'TestJupyter', 'TestWorkplanes', + 'TestAssembleEdges', ] From b0c9f1b40df8a8f28f144f808480b508bfd6529b Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Mon, 23 Dec 2019 15:26:07 +0100 Subject: [PATCH 17/31] Add files via upload --- runtests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/runtests.py b/runtests.py index f1052ca9..e73e19ab 100644 --- a/runtests.py +++ b/runtests.py @@ -16,6 +16,7 @@ suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestExporters.TestExp suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestImporters.TestImporters)) suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestJupyter.TestJupyter)) suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestWorkplanes.TestWorkplanes)) +suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestAssembleEdges.TestAssembleEdges)) if __name__ == '__main__': result = unittest.TextTestRunner().run(suite) From e64ac5d1d195065e61773f839e81e4fbaf69dcb0 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 10:45:32 +0100 Subject: [PATCH 18/31] Delete runtests.py --- runtests.py | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 runtests.py diff --git a/runtests.py b/runtests.py deleted file mode 100644 index e73e19ab..00000000 --- a/runtests.py +++ /dev/null @@ -1,23 +0,0 @@ -import sys -from tests import * -import cadquery -import unittest - -#if you are on python 2.7, you can use -m uniitest discover. -#but this is required for python 2.6.6 on windows. FreeCAD0.12 will not load -#on py 2.7.x on win -suite = unittest.TestSuite() - -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCadObjects.TestCadObjects)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCadQuery.TestCadQuery)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCQGI.TestCQGI)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCQSelectors.TestCQSelectors)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestExporters.TestExporters)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestImporters.TestImporters)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestJupyter.TestJupyter)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestWorkplanes.TestWorkplanes)) -suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestAssembleEdges.TestAssembleEdges)) - -if __name__ == '__main__': - result = unittest.TextTestRunner().run(suite) - sys.exit(not result.wasSuccessful()) From 10a72993507222febdd32c29d0b0241fd8840d6d Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 10:50:03 +0100 Subject: [PATCH 19/31] Update test_cadquery.py --- tests/test_cadquery.py | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index 64b85237..c9324cc9 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2139,3 +2139,61 @@ class TestCadQuery(BaseTest): point = result.faces(">Z").edges(">X").first().val().startPoint().toTuple() self.assertTupleAlmostEquals(point, (0.707106781, 1.414213562, 1.0), decimal_places) + def test_assembleEdges(self): + """ + Tests TestAssembleEdges functionality + """ + + # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides + thickness = 0.1 + edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] + edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) + edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + # Embossed star, need to change optional parameters to obtain nice looking result. + r1=3. + r2=10. + fn=6 + thickness = 0.1 + edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] + edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + # Points on hexagonal pattern coordinates, use of pushpoints. + r1 = 1. + N = 3 + ca = cos(30. * pi/180.) + sa = sin(30. * pi/180.) + # EVEN ROWS + x_p = np.arange(-N*r1, N*r1, ca*2*r1) + y_p = np.arange(-N*r1, N*r1, 3*r1) + x_p, y_p = np.meshgrid(x_p, y_p) + xy_p_even = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] + # ODD ROWS + x_p = np.arange(-(N-0.5)*r1*ca, (N+1.5)*r1*ca, ca*2*r1) + y_p = np.arange(-(N-2+sa)*r1, (N+1+sa)*r1, 3*r1) + x_p, y_p = np.meshgrid(x_p, y_p) + xy_p_odd = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] + pts = xy_p_even + xy_p_odd + # Spike surface + thickness = 0.1 + fn = 6 + edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] + surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] + edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + # Gyroïd, all edges are splines on different workplanes. + thickness = 0.1 + edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] + plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] + offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] + edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) + for i in range(len(edge_points)-1): + edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) From cdb165807c432750bfbb2b5da99d6d372271ff95 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 11:12:57 +0100 Subject: [PATCH 20/31] Delete TestAssembleEdges.py --- tests/TestAssembleEdges.py | 79 -------------------------------------- 1 file changed, 79 deletions(-) delete mode 100644 tests/TestAssembleEdges.py diff --git a/tests/TestAssembleEdges.py b/tests/TestAssembleEdges.py deleted file mode 100644 index 838a797c..00000000 --- a/tests/TestAssembleEdges.py +++ /dev/null @@ -1,79 +0,0 @@ -""" - Tests AssembleEdges functionality -""" - -import cadquery as cq -from tests import BaseTest - -class TestAssembleEdges(BaseTest): - - def edge_wire_1(self): - # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides - thickness = 0.1 - edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] - edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) - edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - return edge_wire - - - def edge_wire_2(self): - # Embossed star, need to change optional parameters to obtain nice looking result. - r1=3. - r2=10. - fn=6 - thickness = 0.1 - edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] - edge_wire = cq.Workplane('XY').polyline(edge_points) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - return edge_wire - - - def edge_wire_3(self): - # Points on hexagonal pattern coordinates, use of pushpoints. - r1 = 1. - N = 3 - ca = cos(30. * pi/180.) - sa = sin(30. * pi/180.) - # EVEN ROWS - x_p = np.arange(-N*r1, N*r1, ca*2*r1) - y_p = np.arange(-N*r1, N*r1, 3*r1) - x_p, y_p = np.meshgrid(x_p, y_p) - xy_p_even = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] - # ODD ROWS - x_p = np.arange(-(N-0.5)*r1*ca, (N+1.5)*r1*ca, ca*2*r1) - y_p = np.arange(-(N-2+sa)*r1, (N+1+sa)*r1, 3*r1) - x_p, y_p = np.meshgrid(x_p, y_p) - xy_p_odd = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] - pts = xy_p_even + xy_p_odd - # Spike surface - thickness = 0.1 - fn = 6 - edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] - surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] - edge_wire = cq.Workplane('XY').polyline(edge_points) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - return edge_wire - - - def edge_wire_4(self): - # Gyroïd, all edges are splines on different workplanes. - thickness = 0.1 - edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] - plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] - offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] - edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) - for i in range(len(edge_points)-1): - edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - return edge_wire - - From 38c3d27bb4900482d8e7b68c893548d87e30fea5 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 11:14:05 +0100 Subject: [PATCH 21/31] Update test_cadquery.py --- tests/test_cadquery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index c9324cc9..f56ecd76 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2141,7 +2141,7 @@ class TestCadQuery(BaseTest): def test_assembleEdges(self): """ - Tests TestAssembleEdges functionality + Tests TestAssembleEdges functionality """ # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides From be3ad421a6e1477d30473f2d57754983f2916d0b Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 11:14:20 +0100 Subject: [PATCH 22/31] Update test_cadquery.py From 81b3f57f8db758b5a4f4d77ae9506bfbfac52efe Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 11:16:02 +0100 Subject: [PATCH 23/31] Update test_cadquery.py --- tests/test_cadquery.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index f56ecd76..a100e0cf 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2164,25 +2164,8 @@ class TestCadQuery(BaseTest): # Points on hexagonal pattern coordinates, use of pushpoints. r1 = 1. - N = 3 - ca = cos(30. * pi/180.) - sa = sin(30. * pi/180.) - # EVEN ROWS - x_p = np.arange(-N*r1, N*r1, ca*2*r1) - y_p = np.arange(-N*r1, N*r1, 3*r1) - x_p, y_p = np.meshgrid(x_p, y_p) - xy_p_even = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] - # ODD ROWS - x_p = np.arange(-(N-0.5)*r1*ca, (N+1.5)*r1*ca, ca*2*r1) - y_p = np.arange(-(N-2+sa)*r1, (N+1+sa)*r1, 3*r1) - x_p, y_p = np.meshgrid(x_p, y_p) - xy_p_odd = [(x,y) for x,y in zip(x_p.flatten(), y_p.flatten())] - pts = xy_p_even + xy_p_odd - # Spike surface - thickness = 0.1 fn = 6 edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] - surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] edge_wire = cq.Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = cq.Wire.assembleEdges(edge_wire) From 707dac5bc426ce0d726bf4b867c3fb0b45033ecb Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 11:39:58 +0100 Subject: [PATCH 24/31] Update test_cadquery.py --- tests/test_cadquery.py | 75 ++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index a100e0cf..a563f813 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2140,43 +2140,40 @@ class TestCadQuery(BaseTest): self.assertTupleAlmostEquals(point, (0.707106781, 1.414213562, 1.0), decimal_places) def test_assembleEdges(self): - """ - Tests TestAssembleEdges functionality - """ - # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides - thickness = 0.1 - edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] - edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) - edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - # Embossed star, need to change optional parameters to obtain nice looking result. - r1=3. - r2=10. - fn=6 - thickness = 0.1 - edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] - edge_wire = cq.Workplane('XY').polyline(edge_points) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - # Points on hexagonal pattern coordinates, use of pushpoints. - r1 = 1. - fn = 6 - edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] - edge_wire = cq.Workplane('XY').polyline(edge_points) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) - - # Gyroïd, all edges are splines on different workplanes. - thickness = 0.1 - edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] - plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] - offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] - edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) - for i in range(len(edge_points)-1): - edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) - edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) + # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides + thickness = 0.1 + edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] + edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) + edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + # Embossed star, need to change optional parameters to obtain nice looking result. + r1=3. + r2=10. + fn=6 + thickness = 0.1 + edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] + edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + # Points on hexagonal pattern coordinates, use of pushpoints. + r1 = 1. + fn = 6 + edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] + edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) + + # Gyroïd, all edges are splines on different workplanes. + thickness = 0.1 + edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] + plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] + offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] + edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) + for i in range(len(edge_points)-1): + edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) + edge_wire = [o.vals()[0] for o in edge_wire.all()] + edge_wire = cq.Wire.assembleEdges(edge_wire) From 3ab5b512912793369acc54500cf3adf601bedef7 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 11:52:00 +0100 Subject: [PATCH 25/31] Update test_cadquery.py --- tests/test_cadquery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index a563f813..039e7e2a 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2140,7 +2140,7 @@ class TestCadQuery(BaseTest): self.assertTupleAlmostEquals(point, (0.707106781, 1.414213562, 1.0), decimal_places) def test_assembleEdges(self): - + # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides thickness = 0.1 edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] From a26766af50c5eb9db94af4f87733562d4944fc71 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 12:00:09 +0100 Subject: [PATCH 26/31] Update test_cadquery.py --- tests/test_cadquery.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index 039e7e2a..f124e169 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2142,38 +2142,35 @@ class TestCadQuery(BaseTest): def test_assembleEdges(self): # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides - thickness = 0.1 edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] - edge_wire = cq.Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) - edge_wire = edge_wire.add(cq.Workplane('YZ').workplane().transformed(offset=cq.Vector(0, 0, -7), rotate=cq.Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) + edge_wire = Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) + edge_wire = edge_wire.add(Workplane('YZ').workplane().transformed(offset=Vector(0, 0, -7), rotate=Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) + edge_wire = Wire.assembleEdges(edge_wire) # Embossed star, need to change optional parameters to obtain nice looking result. r1=3. r2=10. fn=6 - thickness = 0.1 edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] - edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) + edge_wire = Wire.assembleEdges(edge_wire) # Points on hexagonal pattern coordinates, use of pushpoints. r1 = 1. fn = 6 edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] - edge_wire = cq.Workplane('XY').polyline(edge_points) + edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) + edge_wire = Wire.assembleEdges(edge_wire) # Gyroïd, all edges are splines on different workplanes. - thickness = 0.1 edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] offset_list = [-3.54, 3.54, 3.54, 3.54, -3.54, -3.54] - edge_wire = cq.Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) + edge_wire = Workplane(plane_list[0]).workplane(offset=-offset_list[0]).spline(edge_points[0]) for i in range(len(edge_points)-1): - edge_wire = edge_wire.add(cq.Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) + edge_wire = edge_wire.add(Workplane(plane_list[i+1]).workplane(offset=-offset_list[i+1]).spline(edge_points[i+1])) edge_wire = [o.vals()[0] for o in edge_wire.all()] - edge_wire = cq.Wire.assembleEdges(edge_wire) + edge_wire = Wire.assembleEdges(edge_wire) From 428a8d58a11e12250d615dbe825bb37f939ad729 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 12:32:39 +0100 Subject: [PATCH 27/31] Update test_cadquery.py --- tests/test_cadquery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index f124e169..fe1cfe3c 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2152,7 +2152,7 @@ class TestCadQuery(BaseTest): r1=3. r2=10. fn=6 - edge_points = [[r1*cos(i * pi/fn), r1*sin(i * pi/fn)] if i%2==0 else [r2*cos(i * pi/fn), r2*sin(i * pi/fn)] for i in range(2*fn+1)] + edge_points = [[r1*math.cos(i * pi/fn), r1*math.sin(i * pi/fn)] if i%2==0 else [r2*math.cos(i * pi/fn), r2*math.sin(i * pi/fn)] for i in range(2*fn+1)] edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) @@ -2160,7 +2160,7 @@ class TestCadQuery(BaseTest): # Points on hexagonal pattern coordinates, use of pushpoints. r1 = 1. fn = 6 - edge_points = [[r1*cos(i * 2*pi/fn), r1*sin(i * 2*pi/fn)] for i in range(fn+1)] + edge_points = [[r1*math.cos(i * 2*pi/fn), r1*math.sin(i * 2*pi/fn)] for i in range(fn+1)] edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) From d2c029cbeb3e581de4ddb8d9fa4673e6f4127edf Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 12:49:37 +0100 Subject: [PATCH 28/31] Update test_cadquery.py --- tests/test_cadquery.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index fe1cfe3c..5956457d 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2152,7 +2152,7 @@ class TestCadQuery(BaseTest): r1=3. r2=10. fn=6 - edge_points = [[r1*math.cos(i * pi/fn), r1*math.sin(i * pi/fn)] if i%2==0 else [r2*math.cos(i * pi/fn), r2*math.sin(i * pi/fn)] for i in range(2*fn+1)] + edge_points = [[r1*math.cos(i * math.pi/fn), r1*math.sin(i * math.pi/fn)] if i%2==0 else [r2*math.cos(i * math.pi/fn), r2*math.sin(i * math.pi/fn)] for i in range(2*fn+1)] edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) @@ -2160,7 +2160,7 @@ class TestCadQuery(BaseTest): # Points on hexagonal pattern coordinates, use of pushpoints. r1 = 1. fn = 6 - edge_points = [[r1*math.cos(i * 2*pi/fn), r1*math.sin(i * 2*pi/fn)] for i in range(fn+1)] + edge_points = [[r1*math.cos(i * 2*math.pi/fn), r1*math.sin(i * 2*math.pi/fn)] for i in range(fn+1)] edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) From 6196729384b8ce88f05eb6b2342e4aa9844af845 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 16:31:19 +0100 Subject: [PATCH 29/31] Update shapes.py --- cadquery/occ_impl/shapes.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/cadquery/occ_impl/shapes.py b/cadquery/occ_impl/shapes.py index 946c8843..cbba68d7 100644 --- a/cadquery/occ_impl/shapes.py +++ b/cadquery/occ_impl/shapes.py @@ -812,19 +812,24 @@ class Wire(Shape, Mixin1D): :param cls: :param listOfEdges: a list of Edge objects. The edges are not to be consecutive. :return: a wire with the edges assembled + :BRepBuilderAPI_MakeWire::Error() values + :BRepBuilderAPI_WireDone = 0 + :BRepBuilderAPI_EmptyWire = 1 + :BRepBuilderAPI_DisconnectedWire = 2 + :BRepBuilderAPI_NonManifoldWire = 3 """ - wire_builder = BRepBuilderAPI_MakeWire() + edges_list = TopTools_ListOfShape() for e in listOfEdges: edges_list.Append(e.wrapped) wire_builder.Add(edges_list) - if wire_builder.Error(): - w1 = 'BRepBuilderAPI_MakeWire::IsDone(): returns true if this algorithm contains a valid wire. IsDone returns false if: there are no edges in the wire, or the last edge which you tried to add was not connectable = '+ str(wire_builder.IsDone()) - w2 = 'BRepBuilderAPI_MakeWire::Error(): returns the construction status. BRepBuilderAPI_WireDone if the wire is built, or another value of the BRepBuilderAPI_WireError enumeration indicating why the construction failed = ' + str(wire_builder.Error()) - warnings.warn(w1) - warnings.warn(w2) - + if wire_builder.Error()!=0: + w1 = 'BRepBuilderAPI_MakeWire::IsDone(): returns true if this algorithm contains a valid wire. IsDone returns false if: there are no edges in the wire, or the last edge which you tried to add was not connectable = '+ str(wire_builder.IsDone()) + w2 = 'BRepBuilderAPI_MakeWire::Error(): returns the construction status. BRepBuilderAPI_WireDone if the wire is built, or another value of the BRepBuilderAPI_WireError enumeration indicating why the construction failed = ' + str(wire_builder.Error()) + warnings.warn(w1) + warnings.warn(w2) + return cls(wire_builder.Wire()) @classmethod From 1d7b11baf9b8c60a7e4d17b1ea3dfdbb591ecd8b Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Tue, 24 Dec 2019 16:32:38 +0100 Subject: [PATCH 30/31] Add files via upload --- tests/test_cadquery.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index 5956457d..b1b852b7 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2140,14 +2140,14 @@ class TestCadQuery(BaseTest): self.assertTupleAlmostEquals(point, (0.707106781, 1.414213562, 1.0), decimal_places) def test_assembleEdges(self): - + # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] edge_wire = Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) - edge_wire = edge_wire.add(Workplane('YZ').workplane().transformed(offset=Vector(0, 0, -7), rotate=Vector(45, 0, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) + edge_wire = edge_wire.add(Workplane('YZ').workplane().transformed(offset=Vector(0, 0, -7), rotate=Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)])) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) - + # Embossed star, need to change optional parameters to obtain nice looking result. r1=3. r2=10. @@ -2156,15 +2156,16 @@ class TestCadQuery(BaseTest): edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) - + # Points on hexagonal pattern coordinates, use of pushpoints. r1 = 1. fn = 6 edge_points = [[r1*math.cos(i * 2*math.pi/fn), r1*math.sin(i * 2*math.pi/fn)] for i in range(fn+1)] + surface_points = [[0.25,0,0.75], [-0.25,0,0.75], [0,0.25,0.75], [0,-0.25,0.75], [0,0,2]] edge_wire = Workplane('XY').polyline(edge_points) edge_wire = [o.vals()[0] for o in edge_wire.all()] edge_wire = Wire.assembleEdges(edge_wire) - + # Gyroïd, all edges are splines on different workplanes. edge_points = [[[3.54, 3.54], [1.77, 0.0], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [0.0, -1.77], [3.54, -3.54]], [[-3.54, -3.54], [-1.77, 0.0], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]], [[3.54, 3.54], [0.0, 1.77], [-3.54, 3.54]]] plane_list = ['XZ', 'XY', 'YZ', 'XZ', 'YZ', 'XY'] From 42c35b70892d7c30d10b15ea141f3923fd9f7dd1 Mon Sep 17 00:00:00 2001 From: Bruno Agostini Date: Wed, 25 Dec 2019 09:21:15 +0100 Subject: [PATCH 31/31] Update test_cadquery.py --- tests/test_cadquery.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_cadquery.py b/tests/test_cadquery.py index b1b852b7..01562c6e 100644 --- a/tests/test_cadquery.py +++ b/tests/test_cadquery.py @@ -2142,6 +2142,7 @@ class TestCadQuery(BaseTest): def test_assembleEdges(self): # Plate with 5 sides and 2 bumps, one side is not co-planar with the other sides + # Passes an open wire to assembleEdges so that IsDone is true but Error returns 2 to test the warning functionality. edge_points = [[-7.,-7.,0.], [-3.,-10.,3.], [7.,-7.,0.], [7.,7.,0.], [-7.,7.,0.]] edge_wire = Workplane('XY').polyline([(-7.,-7.), (7.,-7.), (7.,7.), (-7.,7.)]) edge_wire = edge_wire.add(Workplane('YZ').workplane().transformed(offset=Vector(0, 0, -7), rotate=Vector(0, 45, 0)).spline([(-7.,0.), (3,-3), (7.,0.)]))