Finished converting the rest of the examples and then started fixing the ones that are broken.

This commit is contained in:
Jeremy Mack Wright 2017-09-20 17:12:30 -04:00
parent e31b95099f
commit a661b0ec4b
18 changed files with 145 additions and 119 deletions

View File

@ -8,7 +8,7 @@ import cadquery as cq
# 3. Selects the top-most Z face of the box. # 3. Selects the top-most Z face of the box.
# 4. Creates a new workplane and then moves and rotates it with the # 4. Creates a new workplane and then moves and rotates it with the
# transformed function. # transformed function.
# 5. Creates a for-construction rectangle that only exists to use for plancing # 5. Creates a for-construction rectangle that only exists to use for placing
# other geometry. # other geometry.
# 6. Selects the vertices of the for-construction rectangle. # 6. Selects the vertices of the for-construction rectangle.
# 7. Places holes at the center of each selected vertex. # 7. Places holes at the center of each selected vertex.

View File

@ -1,11 +1,21 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Create a block with holes in each corner of a rectangle on that workplane # Create a block with holes in each corner of a rectangle on that workplane.
result = cadquery.Workplane("front").box(2, 2, 0.5)\ # 1. Establishes a workplane that an object can be built on.
# 1a. Uses the named plane orientation "front" to define the workplane, meaning
# that the positive Z direction is "up", and the negative Z direction
# is "down".
# 2. Creates a plain box to base future geometry on with the box() function.
# 3. Selects the top-most Z face of the box.
# 4. Creates a new workplane to build new geometry on.
# 5. Creates a for-construction rectangle that only exists to use for placing
# other geometry.
# 6. Selects the vertices of the for-construction rectangle.
# 7. Places holes at the center of each selected vertex.
result = cq.Workplane("front").box(2, 2, 0.5)\
.faces(">Z").workplane() \ .faces(">Z").workplane() \
.rect(1.5, 1.5, forConstruction=True).vertices().hole(0.125) .rect(1.5, 1.5, forConstruction=True).vertices() \
.hole(0.125)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,9 +1,14 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Create a hollow box that's open on both ends with a thin wall # Create a hollow box that's open on both ends with a thin wall.
result = cadquery.Workplane("front").box(2, 2, 2).faces("+Z").shell(0.05) # 1. Establishes a workplane that an object can be built on.
# 1a. Uses the named plane orientation "front" to define the workplane, meaning
# that the positive Z direction is "up", and the negative Z direction
# is "down".
# 2. Creates a plain box to base future geometry on with the box() function.
# 3. Selects faces with normal in +z direction.
# 4. Create a shell by cutting out the top-most Z face.
result = cq.Workplane("front").box(2, 2, 2).faces("+Z").shell(0.05)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,11 +1,20 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Create a lofted section between a rectangle and a circular section # Create a lofted section between a rectangle and a circular section.
result = cadquery.Workplane("front").box(4.0, 4.0, 0.25).faces(">Z") \ # 1. Establishes a workplane that an object can be built on.
# 1a. Uses the named plane orientation "front" to define the workplane, meaning
# that the positive Z direction is "up", and the negative Z direction
# is "down".
# 2. Creates a plain box to base future geometry on with the box() function.
# 3. Selects the top-most Z face of the box.
# 4. Draws a 2D circle at the center of the the top-most face of the box.
# 5. Creates a workplane 3 mm above the face the circle was drawn on.
# 6. Draws a 2D circle on the new, offset workplane.
# 7. Creates a loft between the circle and the rectangle.
result = cq.Workplane("front").box(4.0, 4.0, 0.25).faces(">Z") \
.circle(1.5).workplane(offset=3.0) \ .circle(1.5).workplane(offset=3.0) \
.rect(0.75, 0.5).loft(combine=True) .rect(0.75, 0.5) \
.loft(combine=True)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,11 +1,19 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Create a plate with 4 counter-sunk holes in it # Create a plate with 4 counter-sunk holes in it.
result = cadquery.Workplane(cadquery.Plane.XY()).box(4, 2, 0.5).faces(">Z") \ # 1. Establishes a workplane using an XY object instead of a named plane.
.workplane().rect(3.5, 1.5, forConstruction=True)\ # 2. Creates a plain box to base future geometry on with the box() function.
# 3. Selects the top-most face of the box and established a workplane on that.
# 4. Draws a for-construction rectangle on the workplane which only exists for
# placing other geometry.
# 5. Selects the corner vertices of the rectangle and places a counter-sink
# hole, using each vertex as the center of a hole using the cskHole()
# function.
# 5a. When the depth of the counter-sink hole is set to None, the hole will be
# cut through.
result = cq.Workplane(cq.Plane.XY()).box(4, 2, 0.5).faces(">Z") \
.workplane().rect(3.5, 1.5, forConstruction=True) \
.vertices().cskHole(0.125, 0.25, 82.0, depth=None) .vertices().cskHole(0.125, 0.25, 82.0, depth=None)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,9 +1,13 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Create a plate with 4 rounded corners in the Z-axis # Create a plate with 4 rounded corners in the Z-axis.
result = cadquery.Workplane("XY").box(3, 3, 0.5).edges("|Z").fillet(0.125) # 1. Establishes a workplane that an object can be built on.
# 1a. Uses the X and Y origins to define the workplane, meaning that the
# positive Z direction is "up", and the negative Z direction is "down".
# 2. Creates a plain box to base future geometry on with the box() function.
# 3. Selects all edges that are parallel to the Z axis.
# 4. Creates fillets on each of the selected edges with the specified radius.
result = cq.Workplane("XY").box(3, 3, 0.5).edges("|Z").fillet(0.125)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,13 +1,25 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Create a simple block with a hole through it that we can split # Create a simple block with a hole through it that we can split.
c = cadquery.Workplane("XY").box(1, 1, 1).faces(">Z").workplane() \ # 1. Establishes a workplane that an object can be built on.
# 1a. Uses the X and Y origins to define the workplane, meaning that the
# positive Z direction is "up", and the negative Z direction is "down".
# 2. Creates a plain box to base future geometry on with the box() function.
# 3. Selects the top-most face of the box and establishes a workplane on it
# that new geometry can be built on.
# 4. Draws a 2D circle on the new workplane and then uses it to cut a hole
# all the way through the box.
c = cq.Workplane("XY").box(1, 1, 1).faces(">Z").workplane() \
.circle(0.25).cutThruAll() .circle(0.25).cutThruAll()
# Cut the block in half sideways # 5. Selects the face furthest away from the origin in the +Y axis direction.
# 6. Creates an offset workplane that is set in the center of the object.
# 6a. One possible improvement to this script would be to make the dimensions
# of the box variables, and then divide the Y-axis dimension by 2.0 and
# use that to create the offset workplane.
# 7. Uses the embedded workplane to split the object, keeping only the "top"
# portion.
result = c.faces(">Y").workplane(-0.5).split(keepTop=True) result = c.faces(">Y").workplane(-0.5).split(keepTop=True)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,10 +1,8 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Set up the length, width, and thickness # Set up the length, width, and thickness
(L, w, t) = (20.0, 6.0, 3.0) (L, w, t) = (20.0, 6.0, 3.0)
s = cadquery.Workplane("XY") s = cq.Workplane("XY")
# Draw half the profile of the bottle and extrude it # Draw half the profile of the bottle and extrude it
p = s.center(-L / 2.0, 0).vLine(w / 2.0) \ p = s.center(-L / 2.0, 0).vLine(w / 2.0) \
@ -17,5 +15,5 @@ p.faces(">Z").workplane().circle(3.0).extrude(2.0, True)
# Make a shell # Make a shell
result = p.faces(">Z").shell(0.3) result = p.faces(">Z").shell(0.3)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,6 +1,4 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# Parameter definitions # Parameter definitions
p_outerWidth = 100.0 # Outer width of box enclosure p_outerWidth = 100.0 # Outer width of box enclosure
@ -22,7 +20,7 @@ p_countersinkAngle = 90.0 # Countersink angle (complete angle between opposite
p_lipHeight = 1.0 # Height of lip on the underside of the lid. Sits inside the box body for a snug fit. p_lipHeight = 1.0 # Height of lip on the underside of the lid. Sits inside the box body for a snug fit.
# Outer shell # Outer shell
oshell = cadquery.Workplane("XY").rect(p_outerWidth, p_outerLength) \ oshell = cq.Workplane("XY").rect(p_outerWidth, p_outerLength) \
.extrude(p_outerHeight + p_lipHeight) .extrude(p_outerHeight + p_lipHeight)
# Weird geometry happens if we make the fillets in the wrong order # Weird geometry happens if we make the fillets in the wrong order
@ -75,5 +73,5 @@ else:
# Return the combined result # Return the combined result
result = topOfLid.combineSolids(bottom) result = topOfLid.combineSolids(bottom)
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,6 +1,4 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# The dimensions of the model. These can be modified rather than changing the # The dimensions of the model. These can be modified rather than changing the
# shape's code directly. # shape's code directly.
@ -10,7 +8,7 @@ angle_degrees = 360.0
# Revolve a cylinder from a rectangle # Revolve a cylinder from a rectangle
# Switch comments around in this section to try the revolve operation with different parameters # Switch comments around in this section to try the revolve operation with different parameters
result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve() result = cq.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve()
#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve(angle_degrees) #result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve(angle_degrees)
#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5,-5)) #result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5,-5))
#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5, -5),(-5, 5)) #result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5, -5),(-5, 5))
@ -19,5 +17,5 @@ result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False)
# Revolve a donut with square walls # Revolve a donut with square walls
#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, True).revolve(angle_degrees, (20, 0), (20, 10)) #result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, True).revolve(angle_degrees, (20, 0), (20, 10))
# Render the solid # Displays the result of this script
show(result) show_object(result)

View File

@ -1,7 +1,5 @@
# This example is meant to be used from within the CadQuery module of FreeCAD.
# This script can create any regular rectangular Lego(TM) Brick # This script can create any regular rectangular Lego(TM) Brick
import cadquery import cadquery as cq
from Helpers import show
##### #####
# Inputs # Inputs
@ -28,7 +26,7 @@ total_length = lbumps*pitch - 2.0*clearance
total_width = wbumps*pitch - 2.0*clearance total_width = wbumps*pitch - 2.0*clearance
# make the base # make the base
s = cadquery.Workplane("XY").box(total_length, total_width, height) s = cq.Workplane("XY").box(total_length, total_width, height)
# shell inwards not outwards # shell inwards not outwards
s = s.faces("<Z").shell(-1.0 * t) s = s.faces("<Z").shell(-1.0 * t)
@ -55,4 +53,4 @@ else:
tmp = s tmp = s
# Render the solid # Render the solid
show(tmp) show_object(tmp)

View File

@ -1,6 +1,4 @@
# This example is meant to be used from within the CadQuery module of FreeCAD.
import cadquery as cq import cadquery as cq
from Helpers import show
exploded = False # when true, moves the base away from the top so we see exploded = False # when true, moves the base away from the top so we see
showTop = True # When true, the top is rendered. showTop = True # When true, the top is rendered.
@ -30,12 +28,10 @@ def trapezoid(b1, b2, h):
y = h / 2 y = h / 2
x1 = b1 / 2 x1 = b1 / 2
x2 = b2 / 2 x2 = b2 / 2
return (xyplane return (xyplane.moveTo(-x1, y)
.polyline([(-x1, y), .polyline([(x1, y),
(x1, y),
(x2, -y), (x2, -y),
(-x2, -y), (-x2, -y)]).close())
(-x1, y)]))
# Defines our base shape: a box with fillets around the vertical edges. # Defines our base shape: a box with fillets around the vertical edges.
@ -54,10 +50,10 @@ top = (base(height)
.edges(">Z") .edges(">Z")
.fillet(yFilletRadius) .fillet(yFilletRadius)
# shell the solid from the bottom face, with a .060" wall thickness # shell the solid from the bottom face, with a .060" wall thickness
.faces("-Z") .faces("<Z")
.shell(-wallThickness) .shell(-wallThickness)
# cut five button holes into the top face in a cross pattern. # cut five button holes into the top face in a cross pattern.
.faces("+Z") .faces(">Z")
.workplane() .workplane()
.pushPoints([(0, 0), .pushPoints([(0, 0),
(-xHoleOffset, 0), (-xHoleOffset, 0),
@ -84,6 +80,6 @@ cover = (base(coverThickness)
# Conditionally render the parts # Conditionally render the parts
if showTop: if showTop:
show(top) show_object(top)
if showCover: if showCover:
show(cover) show_object(cover)

View File

@ -1,7 +1,5 @@
# This example is meant to be used from within the CadQuery module of FreeCAD.
import numpy as np import numpy as np
import cadquery import cadquery as cq
from Helpers import show
# Square side and offset in x and y. # Square side and offset in x and y.
side = 10 side = 10
@ -11,16 +9,15 @@ offset = 5
# The polyline is defined as numpy.array so that operations like translation # The polyline is defined as numpy.array so that operations like translation
# of all points are simplified. # of all points are simplified.
pts = np.array([ pts = np.array([
(0, 0),
(side, 0), (side, 0),
(side, side), (side, side),
(0, side), (0, side),
(0, 0), (0, 0),
]) + [offset, offset] ]) + [offset, offset]
result = cadquery.Workplane('XY') \ result = cq.Workplane('XY') \
.polyline(pts).extrude(2) \ .polyline(pts).close().extrude(2) \
.faces('+Z').workplane().circle(side / 2).extrude(1) .faces('+Z').workplane().circle(side / 2).extrude(1)
# Render the solid # Render the solid
show(result) show_object(result)

View File

@ -5,7 +5,6 @@ from __future__ import unicode_literals, division
from collections import namedtuple from collections import namedtuple
import cadquery as cq import cadquery as cq
from Helpers import show
# text_lines is a list of text lines. # text_lines is a list of text lines.
# FreeCAD in braille (converted with braille-converter: # FreeCAD in braille (converted with braille-converter:
@ -180,4 +179,4 @@ _cell_geometry = BrailleCellGeometry(
if base_thickness < get_cylinder_radius(_cell_geometry): if base_thickness < get_cylinder_radius(_cell_geometry):
raise ValueError('Base thickness should be at least {}'.format(dot_height)) raise ValueError('Base thickness should be at least {}'.format(dot_height))
show(make_embossed_plate(text_lines, _cell_geometry)) show_object(make_embossed_plate(text_lines, _cell_geometry))

View File

@ -1,6 +1,4 @@
# This example is meant to be used from within the CadQuery module of FreeCAD. import cadquery as cq
import cadquery
from Helpers import show
# The dimensions of the model. These can be modified rather than changing the # The dimensions of the model. These can be modified rather than changing the
# object's code directly. # object's code directly.
@ -9,7 +7,7 @@ height = 500
thickness = 2 thickness = 2
# Create a plate with two polygons cut through it # Create a plate with two polygons cut through it
result = cadquery.Workplane("front").box(width, height, thickness) result = cq.Workplane("front").box(width, height, thickness)
h_sep = 60 h_sep = 60
for idx in range(4): for idx in range(4):
@ -44,4 +42,4 @@ for idx in range(4):
result = result.workplane(offset=1, centerOption='CenterOfBoundBox').center(-173,-30-idx*h_sep).moveTo(-2.9176,-5.3).threePointArc((-6.05,0),(-2.9176,5.3)).lineTo(2.9176,5.3).threePointArc((6.05,0),(2.9176,-5.3)).close().cutThruAll() result = result.workplane(offset=1, centerOption='CenterOfBoundBox').center(-173,-30-idx*h_sep).moveTo(-2.9176,-5.3).threePointArc((-6.05,0),(-2.9176,5.3)).lineTo(2.9176,5.3).threePointArc((6.05,0),(2.9176,-5.3)).close().cutThruAll()
# Render the solid # Render the solid
show(result) show_object(result)

View File

@ -1,6 +1,4 @@
# This example is meant to be used from within the CadQuery module for FreeCAD import cadquery as cq
import cadquery
from Helpers import show
# Points we will use to create spline and polyline paths to sweep over # Points we will use to create spline and polyline paths to sweep over
pts = [ pts = [
@ -10,33 +8,33 @@ pts = [
] ]
# Spline path generated from our list of points (tuples) # Spline path generated from our list of points (tuples)
path = cadquery.Workplane("XZ").spline(pts) path = cq.Workplane("XZ").spline(pts)
# Sweep a circle with a diameter of 1.0 units along the spline path we just created # Sweep a circle with a diameter of 1.0 units along the spline path we just created
defaultSweep = cadquery.Workplane("XY").circle(1.0).sweep(path) defaultSweep = cq.Workplane("XY").circle(1.0).sweep(path)
# Sweep defaults to making a solid and not generating a Frenet solid. Setting Frenet to True helps prevent creep in # Sweep defaults to making a solid and not generating a Frenet solid. Setting Frenet to True helps prevent creep in
# the orientation of the profile as it is being swept # the orientation of the profile as it is being swept
frenetShell = cadquery.Workplane("XY").circle(1.0).sweep(path, makeSolid=False, isFrenet=True) frenetShell = cq.Workplane("XY").circle(1.0).sweep(path, makeSolid=False, isFrenet=True)
# We can sweep shapes other than circles # We can sweep shapes other than circles
defaultRect = cadquery.Workplane("XY").rect(1.0, 1.0).sweep(path) defaultRect = cq.Workplane("XY").rect(1.0, 1.0).sweep(path)
# Switch to a polyline path, but have it use the same points as the spline # Switch to a polyline path, but have it use the same points as the spline
path = cadquery.Workplane("XZ").polyline(pts) path = cq.Workplane("XZ").polyline(pts)
# Using a polyline path leads to the resulting solid having segments rather than a single swept outer face # Using a polyline path leads to the resulting solid having segments rather than a single swept outer face
plineSweep = cadquery.Workplane("XY").circle(1.0).sweep(path) plineSweep = cq.Workplane("XY").circle(1.0).sweep(path)
# Switch to an arc for the path # Switch to an arc for the path
path = cadquery.Workplane("XZ").threePointArc((1.0, 1.5), (0.0, 1.0)) path = cq.Workplane("XZ").threePointArc((1.0, 1.5), (0.0, 1.0))
# Use a smaller circle section so that the resulting solid looks a little nicer # Use a smaller circle section so that the resulting solid looks a little nicer
arcSweep = cadquery.Workplane("XY").circle(0.5).sweep(path) arcSweep = cq.Workplane("XY").circle(0.5).sweep(path)
# Translate the resulting solids so that they do not overlap and display them left to right # Translate the resulting solids so that they do not overlap and display them left to right
show(defaultSweep) show_object(defaultSweep)
show(frenetShell.translate((5, 0, 0))) show_object(frenetShell.translate((5, 0, 0)))
show(defaultRect.translate((10, 0, 0))) show_object(defaultRect.translate((10, 0, 0)))
show(plineSweep.translate((15, 0, 0))) show_object(plineSweep.translate((15, 0, 0)))
show(arcSweep.translate((20, 0, 0))) show_object(arcSweep.translate((20, 0, 0)))

View File

@ -1,7 +1,6 @@
# 3d printer for mounting hotend to X-carriage inspired by the P3steel Toolson # 3d printer for mounting hotend to X-carriage inspired by the P3steel Toolson
# edition - http://www.thingiverse.com/thing:1054909 # edition - http://www.thingiverse.com/thing:1054909
import cadquery as cq import cadquery as cq
from Helpers import show
def move_to_center(cqObject, shape): def move_to_center(cqObject, shape):
@ -213,4 +212,4 @@ hole_sep = 0.5*face_right.Area()/main_plate_thickness
res = make_aux_holes(res, hole_sep, 2) res = make_aux_holes(res, hole_sep, 2)
# show the result # show the result
show(res) show_object(res)

View File

@ -1,11 +1,10 @@
# Example using advanced logical operators in string selectors # Example using advanced logical operators in string selectors to select only
# to select only the inside edges on a shelled cube to chamfer. # the inside edges on a shelled cube to chamfer.
import cadquery as cq import cadquery as cq
from Helpers import show
result = cq.Workplane("XY").box(2, 2, 2).\ result = cq.Workplane("XY").box(2, 2, 2).\
faces(">Z").shell(-0.2).\ faces(">Z").shell(-0.2).\
faces(">Z").edges("not(<X or >X or <Y or >Y)").\ faces(">Z").edges("not(<X or >X or <Y or >Y)").\
chamfer(0.125) chamfer(0.125)
show(result) show_object(result)