CadQuery Class Summary
This page documents all of the methods and functions of the CadQuery classes, organized alphabetically.
See also
For a listing organized by functional area, see the CadQuery API Reference
Core Classes

2D sketch. 

Defines a coordinate system in space, in which 2D coordinates can be used. 

Nested assembly of Workplane and Shape objects defining their relative positions. 
alias of 
Topological Classes

Represents a shape in the system. 

A Single Point in Space 

A trimmed curve that represents the border of a face 

A series of connected, ordered Edges, that typically bounds a Face 

a bounded surface that represents part of the boundary of a solid 

the outer boundary of a surface 

a single solid 

a collection of disconnected solids 
Geometry Classes

Create a 3dimensional vector 

A 3d , 4x4 transformation matrix. 

A 2D coordinate system in space 

Location in 3D space. 
Selector Classes

Filters a list of objects. 
Selects object nearest the provided point. 


Selects objects inside the 3D box defined by 2 points. 

A selector that handles selection on the basis of a single direction vector. 

Selects objects parallel with the provided direction. 

Selects objects aligned with the provided direction. 

Selects objects perpendicular with the provided direction. 

Selects objects having the prescribed geometry type. 

Select the object with the Nth radius. 

Sorts objects into a list with order determined by the distance of their center projected onto the specified direction. 

Selects objects closest or farthest in the specified direction. 

Filters for objects parallel (or normal) to the specified direction then returns the Nth one. 

Select the object(s) with the Nth length 

Selects the object(s) with Nth area 

Base class for selectors that operates with two other selectors. 

Intersection selector. 

Union selector. 

Difference selector. 

Inverts the selection of given selector. 

Filter lists objects using a simple string syntax. 
Class Details
 class cadquery.Assembly(obj: Optional[Union[Shape, Workplane]] = None, loc: Optional[Location] = None, name: Optional[str] = None, color: Optional[Color] = None, metadata: Optional[Dict[str, Any]] = None)[source]
Bases:
object
Nested assembly of Workplane and Shape objects defining their relative positions.
 Parameters
 __init__(obj: Optional[Union[Shape, Workplane]] = None, loc: Optional[Location] = None, name: Optional[str] = None, color: Optional[Color] = None, metadata: Optional[Dict[str, Any]] = None)[source]
construct an assembly
 Parameters
obj (Optional[Union[Shape, Workplane]]) – root object of the assembly (default: None)
loc (Optional[Location]) – location of the root object (default: None, interpreted as identity transformation)
name (Optional[str]) – unique name of the root object (default: None, resulting in an UUID being generated)
color (Optional[Color]) – color of the added object (default: None)
metadata (Optional[Dict[str, Any]]) – a store for userdefined metadata (default: None)
 Returns
An Assembly object.
To create an empty assembly use:
assy = Assembly(None)
To create one constraint a root object:
b = Workplane().box(1,1,1) assy = Assembly(b, Location(Vector(0,0,1)), name="root")
 __weakref__
list of weak references to the object (if defined)
 add(obj: Assembly, loc: Optional[Location] = None, name: Optional[str] = None, color: Optional[Color] = None) Assembly [source]
 add(obj: Optional[Union[Shape, Workplane]], loc: Optional[Location] = None, name: Optional[str] = None, color: Optional[Color] = None) Assembly
Add a subassembly to the current assembly.
 constrain(q1: str, q2: str, kind: Literal['Plane', 'Point', 'Axis', 'PointInPlane'], param: Any = None) Assembly [source]
 constrain(q1: str, kind: Literal['Plane', 'Point', 'Axis', 'PointInPlane'], param: Any = None) Assembly
 constrain(id1: str, s1: Shape, id2: str, s2: Shape, kind: Literal['Plane', 'Point', 'Axis', 'PointInPlane'], param: Any = None) Assembly
 constrain(id1: str, s1: Shape, kind: Literal['Plane', 'Point', 'Axis', 'PointInPlane'], param: Any = None) Assembly
Define a new constraint.
 save(path: str, exportType: Optional[Literal['STEP', 'XML', 'GLTF', 'VTKJS', 'VRML']] = None, tolerance: float = 0.1, angularTolerance: float = 0.1) Assembly [source]
save as STEP or OCCT native XML file
 Parameters
path (str) – filepath
exportType (Optional[Literal['STEP', 'XML', 'GLTF', 'VTKJS', 'VRML']]) – export format (default: None, results in format being inferred form the path)
tolerance (float) – the deflection tolerance, in model units. Only used for GLTF, VRML. Default 0.1.
angularTolerance (float) – the angular tolerance, in radians. Only used for GLTF, VRML. Default 0.1.
 Return type
 property shapes: List[cadquery.occ_impl.shapes.Shape]
List of Shape objects in the .obj field
 class cadquery.BoundBox(bb: Bnd_Box)[source]
Bases:
object
A BoundingBox for an object or set of objects. Wraps the OCP one
 Parameters
bb (Bnd_Box) –
 Return type
None
 __weakref__
list of weak references to the object (if defined)
 add(obj: Union[Tuple[float, float, float], Vector, BoundBox], tol: Optional[float] = None) BoundBox [source]
Returns a modified (expanded) bounding box
 obj can be one of several things:
a 3tuple corresponding to x,y, and z amounts to add
a vector, containing the x,y,z values to add
another bounding box, where a new box will be created that encloses both.
This bounding box is not changed.
 static findOutsideBox2D(bb1: BoundBox, bb2: BoundBox) Optional[BoundBox] [source]
Compares bounding boxes
Compares bounding boxes. Returns none if neither is inside the other. Returns the outer one if either is outside the other.
BoundBox.isInside works in 3d, but this is a 2d bounding box, so it doesn’t work correctly plus, there was all kinds of rounding error in the builtin implementation i do not understand.
 class cadquery.Color(name: str)[source]
 class cadquery.Color(r: float, g: float, b: float, a: float = 0)
Bases:
object
Wrapper for the OCCT color object Quantity_ColorRGBA.
 __weakref__
list of weak references to the object (if defined)
 class cadquery.Compound(obj: TopoDS_Shape)[source]

a collection of disconnected solids
 Parameters
obj (TopoDS_Shape) –
 fuse(*toFuse: Shape, glue: bool = False, tol: Optional[float] = None) Compound [source]
Fuse shapes together
 classmethod makeCompound(listOfShapes: Iterable[Shape]) Compound [source]
Create a compound out of a list of shapes
 classmethod makeText(text: str, size: float, height: float, font: str = 'Arial', fontPath: Optional[str] = None, kind: Literal['regular', 'bold', 'italic'] = 'regular', halign: Literal['center', 'left', 'right'] = 'center', valign: Literal['center', 'top', 'bottom'] = 'center', position: Plane = Plane(origin=(0.0, 0.0, 0.0), xDir=(1.0, 0.0, 0.0), normal=(0.0, 0.0, 1.0))) Shape [source]
Create a 3D text
 cadquery.Constraint
alias of
ConstraintSpec
 class cadquery.DirectionMinMaxSelector(vector: Vector, directionMax: bool = True, tolerance: float = 0.0001)[source]
Bases:
CenterNthSelector
Selects objects closest or farthest in the specified direction.
 Applicability:
All object types. for a vertex, its point is used. for all other kinds of objects, the center of mass of the object is used.
You can use the string shortcuts >(XYZ) or <(XYZ) if you want to select based on a cardinal direction.
For example this:
CQ(aCube).faces(DirectionMinMaxSelector((0, 0, 1), True)
Means to select the face having the center of mass farthest in the positive z direction, and is the same as:
CQ(aCube).faces(">Z")
 Parameters
vector (Vector) –
directionMax (bool) –
tolerance (float) –
 class cadquery.DirectionSelector(vector: Vector, tolerance: float = 0.0001)[source]
Bases:
BaseDirSelector
Selects objects aligned with the provided direction.
 Applicability:
Linear Edges Planar Faces
Use the string syntax shortcut +/(XYZ) if you want to select based on a cardinal direction.
Example:
CQ(aCube).faces(DirectionSelector((0, 0, 1))
selects faces with the normal in the z direction, and is equivalent to:
CQ(aCube).faces("+Z")
 Parameters
vector (Vector) –
tolerance (float) –
 class cadquery.Edge(obj: TopoDS_Shape)[source]

A trimmed curve that represents the border of a face
 Parameters
obj (TopoDS_Shape) –
 classmethod makeEllipse(x_radius: float, y_radius: float, pnt: ~typing.Union[~cadquery.occ_impl.geom.Vector, ~typing.Tuple[float, float, float]] = Vector: (0.0, 0.0, 0.0), dir: ~typing.Union[~cadquery.occ_impl.geom.Vector, ~typing.Tuple[float, float, float]] = Vector: (0.0, 0.0, 1.0), xdir: ~typing.Union[~cadquery.occ_impl.geom.Vector, ~typing.Tuple[float, float, float]] = Vector: (1.0, 0.0, 0.0), angle1: float = 360.0, angle2: float = 360.0, sense: ~typing.Literal[1, 1] = 1) Edge [source]
Makes an Ellipse centered at the provided point, having normal in the provided direction.
 Parameters
cls –
x_radius (float) – x radius of the ellipse (along the xaxis of plane the ellipse should lie in)
y_radius (float) – y radius of the ellipse (along the yaxis of plane the ellipse should lie in)
pnt (Union[Vector, Tuple[float, float, float]]) – vector representing the center of the ellipse
dir (Union[Vector, Tuple[float, float, float]]) – vector representing the direction of the plane the ellipse should lie in
angle1 (float) – start angle of arc
angle2 (float) – end angle of arc (angle2 == angle1 return closed ellipse = default)
sense (Literal[1, 1]) – clockwise (1) or counter clockwise (1)
xdir (Union[Vector, Tuple[float, float, float]]) –
 Returns
an Edge
 Return type
 classmethod makeLine(v1: Vector, v2: Vector) Edge [source]
Create a line between two points :param v1: Vector that represents the first point :param v2: Vector that represents the second point :return: A linear edge between the two provided points
 classmethod makeSpline(listOfVector: List[Vector], tangents: Optional[Sequence[Vector]] = None, periodic: bool = False, parameters: Optional[Sequence[float]] = None, scale: bool = True, tol: float = 1e06) Edge [source]
Interpolate a spline through the provided points.
 Parameters
listOfVector (List[Vector]) – a list of Vectors that represent the points
tangents (Optional[Sequence[Vector]]) – tuple of Vectors specifying start and finish tangent
periodic (bool) – creation of periodic curves
parameters (Optional[Sequence[float]]) – the value of the parameter at each interpolation point. (The interpolated curve is represented as a vectorvalued function of a scalar parameter.) If periodic == True, then len(parameters) must be len(intepolation points) + 1, otherwise len(parameters) must be equal to len(interpolation points).
scale (bool) – whether to scale the specified tangent vectors before interpolating. Each tangent is scaled, so it’s length is equal to the derivative of the Lagrange interpolated curve. I.e., set this to True, if you want to use only the direction of the tangent vectors specified by
tangents
, but not their magnitude.tol (float) – tolerance of the algorithm (consult OCC documentation). Used to check that the specified points are not too close to each other, and that tangent vectors are not too short. (In either case interpolation may fail.)
 Returns
an Edge
 Return type
 classmethod makeSplineApprox(listOfVector: List[Vector], tol: float = 0.001, smoothing: Optional[Tuple[float, float, float]] = None, minDeg: int = 1, maxDeg: int = 6) Edge [source]
Approximate a spline through the provided points.
 Parameters
listOfVector (List[Vector]) – a list of Vectors that represent the points
tol (float) – tolerance of the algorithm (consult OCC documentation).
smoothing (Optional[Tuple[float, float, float]]) – optional tuple of 3 weights use for variational smoothing (default: None)
minDeg (int) – minimum spline degree. Enforced only when smothing is None (default: 1)
maxDeg (int) – maximum spline degree (default: 6)
 Returns
an Edge
 Return type
 classmethod makeTangentArc(v1: Vector, v2: Vector, v3: Vector) Edge [source]
Makes a tangent arc from point v1, in the direction of v2 and ends at v3. :param cls: :param v1: start vector :param v2: tangent vector :param v3: end vector :return: an edge
 class cadquery.Face(obj: TopoDS_Shape)[source]
Bases:
Shape
a bounded surface that represents part of the boundary of a solid
 Parameters
obj (TopoDS_Shape) –
 classmethod makeFromWires(outerWire: Wire, innerWires: List[Wire] = []) Face [source]
Makes a planar face from one or more wires
 classmethod makeNSidedSurface(edges: ~typing.Iterable[~cadquery.occ_impl.shapes.Edge], points: ~typing.Iterable[~OCP.gp.gp_Pnt], continuity: ~OCP.GeomAbs.GeomAbs_Shape = <GeomAbs_Shape.GeomAbs_C0: 0>, degree: int = 3, nbPtsOnCur: int = 15, nbIter: int = 2, anisotropy: bool = False, tol2d: float = 1e05, tol3d: float = 0.0001, tolAng: float = 0.01, tolCurv: float = 0.1, maxDeg: int = 8, maxSegments: int = 9) Face [source]
Returns a surface enclosed by a closed polygon defined by ‘edges’ and going through ‘points’. :param points :type points: list of gp_Pnt :param edges :type edges: list of Edge :param continuity=GeomAbs_C0 :type continuity: OCC.Core.GeomAbs continuity condition :param Degree = 3 (OCCT default) :type Degree: Integer >= 2 :param NbPtsOnCur = 15 (OCCT default) :type: NbPtsOnCur Integer >= 15 :param NbIter = 2 (OCCT default) :type: NbIterInteger >= 2 :param Anisotropie = False (OCCT default) :type Anisotropie: Boolean :param: Tol2d = 0.00001 (OCCT default) :type Tol2d: float > 0 :param Tol3d = 0.0001 (OCCT default) :type Tol3dReal: float > 0 :param TolAng = 0.01 (OCCT default) :type TolAngReal: float > 0 :param TolCurv = 0.1 (OCCT default) :type TolCurvReal: float > 0 :param MaxDeg = 8 (OCCT default) :type MaxDegInteger: Integer >= 2 (?) :param MaxSegments = 9 (OCCT default) :type MaxSegments: Integer >= 2 (?)
 classmethod makeRuledSurface(edgeOrWire1: Edge, edgeOrWire2: Edge) Face [source]
 classmethod makeRuledSurface(edgeOrWire1: Wire, edgeOrWire2: Wire) Face
‘makeRuledSurface(EdgeWire,EdgeWire) – Make a ruled surface Create a ruled surface out of two edges or wires. If wires are used then these must have the same number of edges
 classmethod makeSplineApprox(points: List[List[Vector]], tol: float = 0.01, smoothing: Optional[Tuple[float, float, float]] = None, minDeg: int = 1, maxDeg: int = 3) Face [source]
Approximate a spline surface through the provided points.
 Parameters
points (List[List[Vector]]) – a 2D list of Vectors that represent the points
tol (float) – tolerance of the algorithm (consult OCC documentation).
smoothing (Optional[Tuple[float, float, float]]) – optional tuple of 3 weights use for variational smoothing (default: None)
minDeg (int) – minimum spline degree. Enforced only when smothing is None (default: 1)
maxDeg (int) – maximum spline degree (default: 6)
 Returns
an Face
 Return type
 normalAt(locationVector: Optional[Vector] = None) Vector [source]
Computes the normal vector at the desired location on the face.
 Returns
a vector representing the direction
 Parameters
locationVector (a vector that lies on the surface.) – the location to compute the normal at. If none, the center of the face is used.
 Return type
 class cadquery.Location[source]
 class cadquery.Location(t: Vector)
 class cadquery.Location(t: Plane)
 class cadquery.Location(t: Plane, v: Vector)
 class cadquery.Location(t: TopLoc_Location)
 class cadquery.Location(t: gp_Trsf)
 class cadquery.Location(t: Vector, ax: Vector, angle: float)
Bases:
object
Location in 3D space. Depending on usage can be absolute or relative.
This class wraps the TopLoc_Location class from OCCT. It can be used to move Shape objects in both relative and absolute manner. It is the preferred type to locate objects in CQ.
 __init__() None [source]
 __init__(t: Vector) None
 __init__(t: Plane) None
 __init__(t: Plane, v: Vector) None
 __init__(t: TopLoc_Location) None
 __init__(t: gp_Trsf) None
 __init__(t: Vector, ax: Vector, angle: float) None
 __weakref__
list of weak references to the object (if defined)
 class cadquery.Matrix[source]
 class cadquery.Matrix(matrix: Union[gp_GTrsf, gp_Trsf])
 class cadquery.Matrix(matrix: Sequence[Sequence[float]])
Bases:
object
A 3d , 4x4 transformation matrix.
Used to move geometry in space.
The provided “matrix” parameter may be None, a gp_GTrsf, or a nested list of values.
If given a nested list, it is expected to be of the form:
 [[m11, m12, m13, m14],
[m21, m22, m23, m24], [m31, m32, m33, m34]]
A fourth row may be given, but it is expected to be: [0.0, 0.0, 0.0, 1.0] since this is a transform matrix.
 __getitem__(rc: Tuple[int, int]) float [source]
Provide Matrix[r, c] syntax for accessing individual values. The row and column parameters start at zero, which is consistent with most python libraries, but is counter to gp_GTrsf(), which is 1indexed.
 Parameters
rc (Tuple[int, int]) –
 Return type
float
 __init__() None [source]
 __init__(matrix: Union[gp_GTrsf, gp_Trsf]) None
 __init__(matrix: Sequence[Sequence[float]]) None
 __repr__() str [source]
Generate a valid python expression representing this Matrix
 Return type
str
 __weakref__
list of weak references to the object (if defined)
 class cadquery.NearestToPointSelector(pnt)[source]
Bases:
Selector
Selects object nearest the provided point.
If the object is a vertex or point, the distance is used. For other kinds of shapes, the center of mass is used to to compute which is closest.
Applicability: All Types of Shapes
Example:
CQ(aCube).vertices(NearestToPointSelector((0,1,0))
returns the vertex of the unit cube closest to the point x=0,y=1,z=0
 class cadquery.ParallelDirSelector(vector: Vector, tolerance: float = 0.0001)[source]
Bases:
BaseDirSelector
Selects objects parallel with the provided direction.
 Applicability:
Linear Edges Planar Faces
Use the string syntax shortcut (XYZ) if you want to select based on a cardinal direction.
Example:
CQ(aCube).faces(ParallelDirSelector((0, 0, 1))
selects faces with the normal parallel to the z direction, and is equivalent to:
CQ(aCube).faces("Z")
 Parameters
vector (Vector) –
tolerance (float) –
 class cadquery.PerpendicularDirSelector(vector: Vector, tolerance: float = 0.0001)[source]
Bases:
BaseDirSelector
Selects objects perpendicular with the provided direction.
 Applicability:
Linear Edges Planar Faces
Use the string syntax shortcut #(XYZ) if you want to select based on a cardinal direction.
Example:
CQ(aCube).faces(PerpendicularDirSelector((0, 0, 1))
selects faces with the normal perpendicular to the z direction, and is equivalent to:
CQ(aCube).faces("#Z")
 Parameters
vector (Vector) –
tolerance (float) –
 class cadquery.Plane(origin: Union[Tuple[float, float, float], Vector], xDir: Optional[Union[Tuple[float, float, float], Vector]] = None, normal: Union[Tuple[float, float, float], Vector] = (0, 0, 1))[source]
Bases:
object
A 2D coordinate system in space
A 2D coordinate system in space, with the xy axes on the plane, and a particular point as the origin.
A plane allows the use of 2D coordinates, which are later converted to global, 3d coordinates when the operations are complete.
Frequently, it is not necessary to create work planes, as they can be created automatically from faces.
 Parameters
 __hash__ = None
 __init__(origin: Union[Tuple[float, float, float], Vector], xDir: Optional[Union[Tuple[float, float, float], Vector]] = None, normal: Union[Tuple[float, float, float], Vector] = (0, 0, 1))[source]
Create a Plane with an arbitrary orientation
 Parameters
 Raises
ValueError – if the specified xDir is not orthogonal to the provided normal
 __weakref__
list of weak references to the object (if defined)
 classmethod named(stdName: str, origin=(0, 0, 0)) Plane [source]
Create a predefined Plane based on the conventional names.
 Parameters
stdName (string) – one of (XYYZZXXZYXZYfrontbackleftrighttopbottom)
origin (3tuple of the origin of the new plane, in global coordinates.) – the desired origin, specified in global coordinates
 Return type
Available named planes are as follows. Direction references refer to the global directions.
Name
xDir
yDir
zDir
XY
+x
+y
+z
YZ
+y
+z
+x
ZX
+z
+x
+y
XZ
+x
+z
y
YX
+y
+x
z
ZY
+z
+y
x
front
+x
+y
+z
back
x
+y
z
left
+z
+y
x
right
z
+y
+x
top
+x
z
+y
bottom
+x
+z
y
 rotated(rotate=(0, 0, 0))[source]
Returns a copy of this plane, rotated about the specified axes
Since the z axis is always normal the plane, rotating around Z will always produce a plane that is parallel to this one.
The origin of the workplane is unaffected by the rotation.
Rotations are done in order x, y, z. If you need a different order, manually chain together multiple rotate() commands.
 Parameters
rotate – Vector [xDegrees, yDegrees, zDegrees]
 Returns
a copy of this plane rotated as requested.
 setOrigin2d(x, y)[source]
Set a new origin in the plane itself
Set a new origin in the plane itself. The plane’s orientation and xDrection are unaffected.
 Parameters
x (float) – offset in the x direction
y (float) – offset in the y direction
 Returns
void
The new coordinates are specified in terms of the current 2D system. As an example:
p = Plane.XY() p.setOrigin2d(2, 2) p.setOrigin2d(2, 2)
results in a plane with its origin at (x, y) = (4, 4) in global coordinates. Both operations were relative to local coordinates of the plane.
 toLocalCoords(obj)[source]
Project the provided coordinates onto this plane
 Parameters
obj – an object or vector to convert
 Returns
an object of the same type, but converted to local coordinates
Most of the time, the zcoordinate returned will be zero, because most operations based on a plane are all 2D. Occasionally, though, 3D points outside of the current plane are transformed. One such example is
Workplane.box()
, where 3D corners of a box are transformed to orient the box in space correctly.
 class cadquery.Selector[source]
Bases:
object
Filters a list of objects.
Filters must provide a single method that filters objects.
 __weakref__
list of weak references to the object (if defined)
 class cadquery.Shape(obj: TopoDS_Shape)[source]
Bases:
object
Represents a shape in the system. Wraps TopoDS_Shape.
 Parameters
obj (TopoDS_Shape) –
 BoundingBox(tolerance: Optional[float] = None) BoundBox [source]
Create a bounding box for this Shape.
 CenterOfBoundBox(tolerance: Optional[float] = None) Vector [source]
 Parameters
tolerance (Optional[float]) – Tolerance passed to the
BoundingBox()
method Returns
Center of the bounding box of this shape
 Return type
 static CombinedCenter(objects: Iterable[Shape]) Vector [source]
Calculates the center of mass of multiple objects.
 static CombinedCenterOfBoundBox(objects: List[Shape]) Vector [source]
Calculates the center of a bounding box of multiple objects.
 CompSolids() List[CompSolid] [source]
 Returns
All the compsolids in this Shape
 Return type
List[CompSolid]
 Compounds() List[Compound] [source]
 Returns
All the compounds in this Shape
 Return type
List[Compound]
 __weakref__
list of weak references to the object (if defined)
 classmethod cast(obj: TopoDS_Shape, forConstruction: bool = False) Shape [source]
Returns the right type of wrapper, given a OCCT object
 Parameters
obj (TopoDS_Shape) –
forConstruction (bool) –
 Return type
 static computeMass(obj: Shape) float [source]
Calculates the ‘mass’ of an object.
 Parameters
obj (Shape) – Compute the mass of this object
 Return type
float
 copy() T [source]
Creates a new object that is a copy of this object.
 Parameters
self (T) –
 Return type
T
 exportBrep(f: Union[str, BytesIO]) bool [source]
Export this shape to a BREP file
 Parameters
f (Union[str, BytesIO]) –
 Return type
bool
 exportStep(fileName: str) IFSelect_ReturnStatus [source]
Export this shape to a STEP file
 Parameters
fileName (str) –
 Return type
IFSelect_ReturnStatus
 exportStl(fileName: str, tolerance: float = 0.001, angularTolerance: float = 0.1) bool [source]
Exports a shape to a specified STL file.
 Parameters
fileName (fileName) – The path and file name to write the STL output to.
tolerance (float) – A linear deflection setting which limits the distance between a curve and its tessellation. Setting this value too low will result in large meshes that can consume computing resources. Setting the value too high can result in meshes with a level of detail that is too low. Default is 0.1, which is good starting point for a range of cases.
angularTolerance (float) –
Angular deflection setting which limits the angle between subsequent segments in a polyline. Default is 0.1.
 Return type
bool
 facesIntersectedByLine(point: Union[Vector, Tuple[float, float, float]], axis: Union[Vector, Tuple[float, float, float]], tol: float = 0.0001, direction: Optional[Literal['AlongAxis', 'Opposite']] = None)[source]
Computes the intersections between the provided line and the faces of this Shape
 Point
Base point for defining a line
 Axis
Axis on which the line rest
 Tol
Intersection tolerance
 Direction
Valid values : “AlongAxis”, “Opposite”, if specified will ignore all faces that are not in the specified direction
 Parameters
including the face where the :point: lies if it is the case
 fuse(*toFuse: Shape, glue: bool = False, tol: Optional[float] = None) Shape [source]
Fuse the positional arguments with this Shape.
 geomType() Literal['Vertex', 'Wire', 'Shell', 'Solid', 'Compound', 'PLANE', 'CYLINDER', 'CONE', 'SPHERE', 'TORUS', 'BEZIER', 'BSPLINE', 'REVOLUTION', 'EXTRUSION', 'OFFSET', 'OTHER', 'LINE', 'CIRCLE', 'ELLIPSE', 'HYPERBOLA', 'PARABOLA'] [source]
Gets the underlying geometry type.
Implementations can return any values desired, but the values the user uses in type filters should correspond to these.
As an example, if a user does:
CQ(object).faces("%mytype")
The expectation is that the geomType attribute will return ‘mytype’
The return values depend on the type of the shape:
Vertex: always ‘Vertex’Edge: LINE, ARC, CIRCLE, SPLINEFace: PLANE, SPHERE, CONESolid: ‘Solid’Shell: ‘Shell’Compound: ‘Compound’Wire: ‘Wire’ Returns
A string according to the geometry type
 Return type
Literal[‘Vertex’, ‘Wire’, ‘Shell’, ‘Solid’, ‘Compound’, ‘PLANE’, ‘CYLINDER’, ‘CONE’, ‘SPHERE’, ‘TORUS’, ‘BEZIER’, ‘BSPLINE’, ‘REVOLUTION’, ‘EXTRUSION’, ‘OFFSET’, ‘OTHER’, ‘LINE’, ‘CIRCLE’, ‘ELLIPSE’, ‘HYPERBOLA’, ‘PARABOLA’]
 hashCode() int [source]
Returns a hashed value denoting this shape. It is computed from the TShape and the Location. The Orientation is not used.
 Return type
int
 classmethod importBrep(f: Union[str, BytesIO]) Shape [source]
Import shape from a BREP file
 Parameters
f (Union[str, BytesIO]) –
 Return type
 intersect(*toIntersect: Shape) Shape [source]
Intersection of the positional arguments and this Shape.
 isEqual(other: Shape) bool [source]
Returns True if two shapes are equal, i.e. if they share the same TShape with the same Locations and Orientations. Also see
isSame()
. Parameters
other (Shape) –
 Return type
bool
 isNull() bool [source]
Returns true if this shape is null. In other words, it references no underlying shape with the potential to be given a location and an orientation.
 Return type
bool
 isSame(other: Shape) bool [source]
Returns True if other and this shape are same, i.e. if they share the same TShape with the same Locations. Orientations may differ. Also see
isEqual()
 Parameters
other (Shape) –
 Return type
bool
 isValid() bool [source]
Returns True if no defect is detected on the shape S or any of its subshapes. See the OCCT docs on BRepCheck_Analyzer::IsValid for a full description of what is checked.
 Return type
bool
 locate(loc: Location) T [source]
Apply a location in absolute sense to self
 Parameters
self (T) –
loc (Location) –
 Return type
T
 located(loc: Location) T [source]
Apply a location in absolute sense to a copy of self
 Parameters
self (T) –
loc (Location) –
 Return type
T
 mesh(tolerance: float, angularTolerance: float = 0.1)[source]
Generate triangulation if none exists.
 Parameters
tolerance (float) –
angularTolerance (float) –
 mirror(mirrorPlane: Union[Literal['XY', 'YX', 'XZ', 'ZX', 'YZ', 'ZY'], Vector, Tuple[float, float, float]] = 'XY', basePointVector: Union[Vector, Tuple[float, float, float]] = (0, 0, 0)) Shape [source]
Applies a mirror transform to this Shape. Does not duplicate objects about the plane.
 Parameters
 Returns
The mirrored shape
 Return type
 move(loc: Location) T [source]
Apply a location in relative sense (i.e. update current location) to self
 Parameters
self (T) –
loc (Location) –
 Return type
T
 moved(loc: Location) T [source]
Apply a location in relative sense (i.e. update current location) to a copy of self
 Parameters
self (T) –
loc (Location) –
 Return type
T
 rotate(startVector: Vector, endVector: Vector, angleDegrees: float) T [source]
Rotates a shape around an axis.
 Parameters
self (T) –
startVector (either a 3tuple or a Vector) – start point of rotation axis
endVector (either a 3tuple or a Vector) – end point of rotation axis
angleDegrees (float) – angle to rotate, in degrees
 Returns
a copy of the shape, rotated
 Return type
T
 scale(factor: float) Shape [source]
Scales this shape through a transformation.
 Parameters
factor (float) –
 Return type
 toVtkPolyData(tolerance: float, angularTolerance: float = 0.1, normals: bool = True) vtkPolyData [source]
Convert shape to vtkPolyData
 Parameters
tolerance (float) –
angularTolerance (float) –
normals (bool) –
 Return type
vtkPolyData
 transformGeometry(tMatrix: Matrix) Shape [source]
Transforms this shape by tMatrix.
WARNING: transformGeometry will sometimes convert lines and circles to splines, but it also has the ability to handle skew and stretching transformations.
If your transformation is only translation and rotation, it is safer to use
transformShape()
, which doesn’t change the underlying type of the geometry, but cannot handle skew transformations.
 transformShape(tMatrix: Matrix) Shape [source]
Transforms this Shape by tMatrix. Also see
transformGeometry()
.
 class cadquery.Shell(obj: TopoDS_Shape)[source]
Bases:
Shape
the outer boundary of a surface
 Parameters
obj (TopoDS_Shape) –
 class cadquery.Sketch(parent: ~typing.Optional[~typing.Any] = None, locs: ~typing.Iterable[~cadquery.occ_impl.geom.Location] = (<cadquery.occ_impl.geom.Location object>, ))[source]
Bases:
object
2D sketch. Supports faces, edges and edges with constraints based construction.
 Parameters
parent (Any) –
locs (List[Location]) –
 __init__(parent: ~typing.Optional[~typing.Any] = None, locs: ~typing.Iterable[~cadquery.occ_impl.geom.Location] = (<cadquery.occ_impl.geom.Location object>, ))[source]
Construct an empty sketch.
 Parameters
self (T) –
parent (Optional[Any]) –
locs (Iterable[Location]) –
 __iter__() Iterator[Face] [source]
Iterate over faceslocations combinations.
 Return type
Iterator[Face]
 __weakref__
list of weak references to the object (if defined)
 arc(self: T, p1: Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]], p2: Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]], p3: Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]], tag: Optional[str] = None, forConstruction: bool = False) T [source]
Construct an arc starting at p1, through p2, ending at p3
 assemble(mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Assemble edges into faces.
 Parameters
self (T) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 chamfer(d: Union[int, float]) T [source]
Add a chamfer based on current selection.
 Parameters
self (T) –
d (Union[int, float]) –
 Return type
T
 circle(r: Union[int, float], mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct a circular face.
 Parameters
self (T) –
r (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 close(tag: Optional[str] = None) T [source]
Connect last edge to the first one.
 Parameters
self (T) –
tag (Optional[str]) –
 Return type
T
 constrain(self: T, tag: str, constraint: Literal['Fixed', 'FixedPoint', 'Coincident', 'Angle', 'Length', 'Distance', 'Radius', 'Orientation', 'ArcAngle'], arg: Any) T [source]
Add a constraint.
 Parameters
self (T) –
tag (str) –
constraint (Literal['Fixed', 'FixedPoint', 'Coincident', 'Angle', 'Length', 'Distance', 'Radius', 'Orientation', 'ArcAngle']) –
arg (Any) –
 Return type
T
 distribute(n: int, start: Union[int, float] = 0, stop: Union[int, float] = 1, rotate: bool = True) T [source]
Distribute locations along selected edges or wires.
 Parameters
self (T) –
n (int) –
start (Union[int, float]) –
stop (Union[int, float]) –
rotate (bool) –
 Return type
T
 each(callback: Callable[[Location], Union[Face, Sketch, Compound]], mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None, ignore_selection: bool = False) T [source]
Apply a callback on all applicable entities.
 edge(val: Edge, tag: Optional[str] = None, forConstruction: bool = False) T [source]
Add an edge to the sketch.
 Parameters
self (T) –
val (Edge) –
tag (Optional[str]) –
forConstruction (bool) –
 Return type
T
 edges(s: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select edges.
 Parameters
self (T) –
s (Optional[Union[str, Selector]]) –
tag (Optional[str]) –
 Return type
T
 ellipse(a1: Union[int, float], a2: Union[int, float], angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct an elliptical face.
 Parameters
self (T) –
a1 (Union[int, float]) –
a2 (Union[int, float]) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 face(b: Union[Wire, Iterable[Edge], Compound, T], angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None, ignore_selection: bool = False) T [source]
Construct a face from a wire or edges.
 faces(s: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select faces.
 Parameters
self (T) –
s (Optional[Union[str, Selector]]) –
tag (Optional[str]) –
 Return type
T
 fillet(d: Union[int, float]) T [source]
Add a fillet based on current selection.
 Parameters
self (T) –
d (Union[int, float]) –
 Return type
T
 hull(mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Generate a convex hull from current selection or all objects.
 Parameters
self (T) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 importDXF(filename: str, tol: float = 1e06, exclude: List[str] = [], angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Import a DXF file and construct face(s)
 Parameters
self (T) –
filename (str) –
tol (float) –
exclude (List[str]) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 located(loc: Location) T [source]
Create a partial copy of the sketch with a new location.
 Parameters
self (T) –
loc (Location) –
 Return type
T
 moved(loc: Location) T [source]
Create a partial copy of the sketch with moved _faces.
 Parameters
self (T) –
loc (Location) –
 Return type
T
 offset(d: Union[int, float], mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Offset selected wires or edges.
 Parameters
self (T) –
d (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 parray(r: Union[int, float], a1: Union[int, float], da: Union[int, float], n: int, rotate: bool = True) T [source]
Generate a polar array of locations.
 Parameters
self (T) –
r (Union[int, float]) –
a1 (Union[int, float]) –
da (Union[int, float]) –
n (int) –
rotate (bool) –
 Return type
T
 polygon(pts: Iterable[Union[Vector, Tuple[Union[int, float], Union[int, float]]]], angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct a polygonal face.
 Parameters
self (T) –
pts (Iterable[Union[Vector, Tuple[Union[int, float], Union[int, float]]]]) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 push(locs: Iterable[Union[Location, Vector, Tuple[Union[int, float], Union[int, float]]]], tag: Optional[str] = None) T [source]
Set current selection to given locations or points.
 rarray(xs: Union[int, float], ys: Union[int, float], nx: int, ny: int) T [source]
Generate a rectangular array of locations.
 Parameters
self (T) –
xs (Union[int, float]) –
ys (Union[int, float]) –
nx (int) –
ny (int) –
 Return type
T
 rect(w: Union[int, float], h: Union[int, float], angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct a rectangular face.
 Parameters
self (T) –
w (Union[int, float]) –
h (Union[int, float]) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 regularPolygon(r: Union[int, float], n: int, angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct a regular polygonal face.
 Parameters
self (T) –
r (Union[int, float]) –
n (int) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 segment(self: T, p1: Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]], p2: Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]], tag: Optional[str] = None, forConstruction: bool = False) T [source]
Construct a segment.
 select(*tags: str) T [source]
Select based on tags.
 Parameters
self (T) –
tags (str) –
 Return type
T
 slot(w: Union[int, float], h: Union[int, float], angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct a slotshaped face.
 Parameters
self (T) –
w (Union[int, float]) –
h (Union[int, float]) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 solve() T [source]
Solve current constraints and update edge positions.
 Parameters
self (T) –
 Return type
T
 spline(self: T, pts: Iterable[Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]]], tangents: Optional[Iterable[Union[cadquery.occ_impl.geom.Vector, Tuple[Union[int, float], Union[int, float]]]]], periodic: bool, tag: Optional[str] = None, forConstruction: bool = False) T [source]
Construct a spline edge.
 trapezoid(w: Union[int, float], h: Union[int, float], a1: Union[int, float], a2: Optional[float] = None, angle: Union[int, float] = 0, mode: Literal['a', 's', 'i', 'c'] = 'a', tag: Optional[str] = None) T [source]
Construct a trapezoidal face.
 Parameters
self (T) –
w (Union[int, float]) –
h (Union[int, float]) –
a1 (Union[int, float]) –
a2 (Optional[float]) –
angle (Union[int, float]) –
mode (Literal['a', 's', 'i', 'c']) –
tag (Optional[str]) –
 Return type
T
 class cadquery.Solid(obj: TopoDS_Shape)[source]

a single solid
 Parameters
obj (TopoDS_Shape) –
 classmethod extrudeLinear(cls, outerWire: cadquery.occ_impl.shapes.Wire, innerWires: List[cadquery.occ_impl.shapes.Wire], vecNormal: cadquery.occ_impl.geom.Vector, taper: Union[float, int] = 0) 'Solid' [source]
Attempt to extrude the list of wires into a prismatic solid in the provided direction
 Parameters
 Returns
a Solid object
 Return type
The wires must not intersect
Extruding wires is very nontrivial. Nested wires imply very different geometry, and there are many geometries that are invalid. In general, the following conditions must be met:
all wires must be closed
there cannot be any intersecting or selfintersecting wires
wires must be listed from outside in
more than one levels of nesting is not supported reliably
This method will attempt to sort the wires, but there is much work remaining to make this method reliable.
 classmethod extrudeLinearWithRotation(outerWire: Wire, innerWires: List[Wire], vecCenter: Vector, vecNormal: Vector, angleDegrees: Union[float, int]) Solid [source]
Creates a ‘twisted prism’ by extruding, while simultaneously rotating around the extrusion vector.
Though the signature may appear to be similar enough to extrudeLinear to merit combining them, the construction methods used here are different enough that they should be separate.
At a high level, the steps followed are: (1) accept a set of wires (2) create another set of wires like this one, but which are transformed and rotated (3) create a ruledSurface between the sets of wires (4) create a shell and compute the resulting object
 Parameters
outerWire (Wire) – the outermost wire, a cad.Wire
innerWires (List[Wire]) – a list of inner wires, a list of cad.Wire
vecCenter (Vector) – the center point about which to rotate. the axis of rotation is defined by vecNormal, located at vecCenter. ( a cad.Vector )
vecNormal (Vector) – a vector along which to extrude the wires ( a cad.Vector )
angleDegrees (Union[float, int]) – the angle to rotate through while extruding
 Returns
a cad.Solid object
 Return type
 classmethod interpPlate(surf_edges, surf_pts, thickness, degree=3, nbPtsOnCur=15, nbIter=2, anisotropy=False, tol2d=1e05, tol3d=0.0001, tolAng=0.01, tolCurv=0.1, maxDeg=8, maxSegments=9) Union[Solid, Face] [source]
Returns a plate surface that is ‘thickness’ thick, enclosed by ‘surf_edge_pts’ points, and going through ‘surf_pts’ points.
:param surf_edges :type 1 surf_edges: list of [x,y,z] float ordered coordinates :type 2 surf_edges: list of ordered or unordered CadQuery wires :param surf_pts = [] (uses only edges if []) :type surf_pts: list of [x,y,z] float coordinates :param thickness = 0 (returns 2D surface if 0) :type thickness: float (may be negative or positive depending on thickening direction) :param Degree = 3 (OCCT default) :type Degree: Integer >= 2 :param NbPtsOnCur = 15 (OCCT default) :type: NbPtsOnCur Integer >= 15 :param NbIter = 2 (OCCT default) :type: NbIterInteger >= 2 :param Anisotropie = False (OCCT default) :type Anisotropie: Boolean :param: Tol2d = 0.00001 (OCCT default) :type Tol2d: float > 0 :param Tol3d = 0.0001 (OCCT default) :type Tol3dReal: float > 0 :param TolAng = 0.01 (OCCT default) :type TolAngReal: float > 0 :param TolCurv = 0.1 (OCCT default) :type TolCurvReal: float > 0 :param MaxDeg = 8 (OCCT default) :type MaxDegInteger: Integer >= 2 (?) :param MaxSegments = 9 (OCCT default) :type MaxSegments: Integer >= 2 (?)
 static isSolid(obj: Shape) bool [source]
Returns true if the object is a solid, false otherwise
 Parameters
obj (Shape) –
 Return type
bool
 classmethod makeBox(length,width,height,[pnt,dir])  Make a box located in pnt with the dimensions (length,width,height)[source]
By default pnt=Vector(0,0,0) and dir=Vector(0,0,1)’
 classmethod makeCone(radius1: float, radius2: float, height: float, pnt: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 0.0), dir: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0), angleDegrees: float = 360) Solid [source]
Make a cone with given radii and height By default pnt=Vector(0,0,0), dir=Vector(0,0,1) and angle=360’
 classmethod makeCylinder(radius: float, height: float, pnt: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 0.0), dir: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0), angleDegrees: float = 360) Solid [source]
makeCylinder(radius,height,[pnt,dir,angle]) – Make a cylinder with a given radius and height By default pnt=Vector(0,0,0),dir=Vector(0,0,1) and angle=360’
 classmethod makeLoft(listOfWire: List[Wire], ruled: bool = False) Solid [source]
makes a loft from a list of wires The wires will be converted into faces when possible– it is presumed that nobody ever actually wants to make an infinitely thin shell for a real FreeCADPart.
 classmethod makeSphere(radius: float, pnt: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 0.0), dir: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0), angleDegrees1: float = 0, angleDegrees2: float = 90, angleDegrees3: float = 360) Shape [source]
Make a sphere with a given radius By default pnt=Vector(0,0,0), dir=Vector(0,0,1), angle1=0, angle2=90 and angle3=360
 classmethod makeTorus(radius1: float, radius2: float, pnt: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 0.0), dir: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0), angleDegrees1: float = 0, angleDegrees2: float = 360) Solid [source]
makeTorus(radius1,radius2,[pnt,dir,angle1,angle2,angle]) – Make a torus with a given radii and angles By default pnt=Vector(0,0,0),dir=Vector(0,0,1),angle1=0 ,angle1=360 and angle=360’
 classmethod makeWedge(dx: float, dy: float, dz: float, xmin: float, zmin: float, xmax: float, zmax: float, pnt: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 0.0), dir: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0)) Solid [source]
Make a wedge located in pnt By default pnt=Vector(0,0,0) and dir=Vector(0,0,1)
 classmethod revolve(outerWire: Wire, innerWires: List[Wire], angleDegrees: Union[float, int], axisStart: Vector, axisEnd: Vector) Solid [source]
Attempt to revolve the list of wires into a solid in the provided direction
 Parameters
outerWire (Wire) – the outermost wire
innerWires (List[Wire]) – a list of inner wires
angleDegrees (float, anything less than 360 degrees will leave the shape open) – the angle to revolve through.
axisStart (tuple, a two tuple) – the start point of the axis of rotation
axisEnd (tuple, a two tuple) – the end point of the axis of rotation
 Returns
a Solid object
 Return type
The wires must not intersect
all wires must be closed
there cannot be any intersecting or selfintersecting wires
wires must be listed from outside in
more than one levels of nesting is not supported reliably
the wire(s) that you’re revolving cannot be centered
This method will attempt to sort the wires, but there is much work remaining to make this method reliable.
 classmethod sweep(cls, outerWire: cadquery.occ_impl.shapes.Wire, innerWires: List[cadquery.occ_impl.shapes.Wire], path: Union[cadquery.occ_impl.shapes.Wire, cadquery.occ_impl.shapes.Edge], makeSolid: bool = True, isFrenet: bool = False, mode: Union[cadquery.occ_impl.geom.Vector, cadquery.occ_impl.shapes.Wire, cadquery.occ_impl.shapes.Edge, NoneType] = None, transitionMode: Literal['transformed', 'round', 'right'] = 'transformed') 'Shape' [source]
Attempt to sweep the list of wires into a prismatic solid along the provided path
 Parameters
outerWire (Wire) – the outermost wire
innerWires (List[Wire]) – a list of inner wires
path (Union[Wire, Edge]) – The wire to sweep the face resulting from the wires over
makeSolid (boolean) – return Solid or Shell (default True)
isFrenet (boolean) – Frenet mode (default False)
mode (Optional[Union[Vector, Wire, Edge]]) – additional sweep mode parameters.
transitionMode (Literal['transformed', 'round', 'right']) – handling of profile orientation at C1 path discontinuities. Possible values are {‘transformed’,’round’, ‘right’} (default: ‘right’).
 Returns
a Solid object
 Return type
 classmethod sweep_multi(profiles: Iterable[Union[Wire, Face]], path: Union[Wire, Edge], makeSolid: bool = True, isFrenet: bool = False, mode: Optional[Union[Vector, Wire, Edge]] = None) Solid [source]
Multi section sweep. Only single outer profile per section is allowed.
 Parameters
 Returns
a Solid object
 Return type
 class cadquery.StringSyntaxSelector(selectorString)[source]
Bases:
Selector
Filter lists objects using a simple string syntax. All of the filters available in the string syntax are also available ( usually with more functionality ) through the creation of fullfledged selector objects. see
Selector
and its subclassesFiltering works differently depending on the type of object list being filtered.
 Parameters
selectorString – A twopart selector string, [selector][axis]
 Returns
objects that match the specified selector
*Modifiers* are
('','+','','<','>','%')
 
parallel to ( same as
ParallelDirSelector
). Can return multiple objects. #
perpendicular to (same as
PerpendicularDirSelector
) +
positive direction (same as
DirectionSelector
) 
negative direction (same as
DirectionSelector
) >
maximize (same as
DirectionMinMaxSelector
with directionMax=True) <
minimize (same as
DirectionMinMaxSelector
with directionMax=False ) %
curve/surface type (same as
TypeSelector
)
*axisStrings* are:
X,Y,Z,XY,YZ,XZ
or(x,y,z)
which defines an arbitrary directionIt is possible to combine simple selectors together using logical operations. The following operations are supported
 and
Logical AND, e.g. >X and >Y
 or
Logical OR, e.g. X or Y
 not
Logical NOT, e.g. not #XY
 exc(ept)
Set difference (equivalent to AND NOT): X exc >Z
Finally, it is also possible to use even more complex expressions with nesting and arbitrary number of terms, e.g.
(not >X[0] and #XY) or >XY[0]
Selectors are a complex topic: see String Selectors Reference for more information
 class cadquery.TypeSelector(typeString: str)[source]
Bases:
Selector
Selects objects having the prescribed geometry type.
 Applicability:
Faces: PLANE, CYLINDER, CONE, SPHERE, TORUS, BEZIER, BSPLINE, REVOLUTION, EXTRUSION, OFFSET, OTHER Edges: LINE, CIRCLE, ELLIPSE, HYPERBOLA, PARABOLA, BEZIER, BSPLINE, OFFSET, OTHER
You can use the string selector syntax. For example this:
CQ(aCube).faces ( TypeSelector("PLANE") )
will select 6 faces, and is equivalent to:
CQ(aCube).faces( "%PLANE" )
 Parameters
typeString (str) –
 class cadquery.Vector(x: float, y: float, z: float)[source]
 class cadquery.Vector(x: float, y: float)
 class cadquery.Vector(v: Vector)
 class cadquery.Vector(v: Sequence[float])
 class cadquery.Vector(v: Union[gp_Vec, gp_Pnt, gp_Dir, gp_XYZ])
 class cadquery.Vector
Bases:
object
Create a 3dimensional vector
 Parameters
args – a 3D vector, with xyz parts.
 you can either provide:
nothing (in which case the null vector is return)
a gp_Vec
a vector ( in which case it is copied )
a 3tuple
a 2tuple (z assumed to be 0)
three float values: x, y, and z
two float values: x,y
 Center() Vector [source]
Return the vector itself
The center of myself is myself. Provided so that vectors, vertices, and other shapes all support a common interface, when Center() is requested for all objects on the stack.
 Return type
 __eq__(other: Vector) bool [source]
Return self==value.
 Parameters
other (Vector) –
 Return type
bool
 __hash__ = None
 __init__(x: float, y: float, z: float) None [source]
 __init__(x: float, y: float) None
 __init__(v: Vector) None
 __init__(v: Sequence[float]) None
 __init__(v: Union[gp_Vec, gp_Pnt, gp_Dir, gp_XYZ]) None
 __init__() None
 __weakref__
list of weak references to the object (if defined)
 multiply(scale: float) Vector [source]
Return a copy multiplied by the provided scalar
 Parameters
scale (float) –
 Return type
 class cadquery.Vertex(obj: TopoDS_Shape, forConstruction: bool = False)[source]
Bases:
Shape
A Single Point in Space
 Parameters
obj (TopoDS_Shape) –
forConstruction (bool) –
 class cadquery.Wire(obj: TopoDS_Shape)[source]

A series of connected, ordered Edges, that typically bounds a Face
 Parameters
obj (TopoDS_Shape) –
 classmethod assembleEdges(listOfEdges: Iterable[Edge]) Wire [source]
Attempts to build a wire that consists of the edges in the provided list :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
 classmethod combine(listOfWires: Iterable[Union[Wire, Edge]], tol: float = 1e09) List[Wire] [source]
Attempt to combine a list of wires and edges into a new wire. :param cls: :param listOfWires: :param tol: default 1e9 :return: List[Wire]
 classmethod makeCircle(radius: float, center: Vector, normal: Vector) Wire [source]
Makes a Circle centered at the provided point, having normal in the provided direction :param radius: floating point radius of the circle, must be > 0 :param center: vector representing the center of the circle :param normal: vector representing the direction of the plane the circle should lie in :return:
 classmethod makeEllipse(x_radius: float, y_radius: float, center: Vector, normal: Vector, xDir: Vector, angle1: float = 360.0, angle2: float = 360.0, rotation_angle: float = 0.0, closed: bool = True) Wire [source]
Makes an Ellipse centered at the provided point, having normal in the provided direction :param x_radius: floating point major radius of the ellipse (xaxis), must be > 0 :param y_radius: floating point minor radius of the ellipse (yaxis), must be > 0 :param center: vector representing the center of the circle :param normal: vector representing the direction of the plane the circle should lie in :param angle1: start angle of arc :param angle2: end angle of arc :param rotation_angle: angle to rotate the created ellipse / arc :return: Wire
 classmethod makeHelix(pitch: float, height: float, radius: float, center: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 0.0), dir: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0), angle: float = 360.0, lefthand: bool = False) Wire [source]
Make a helix with a given pitch, height and radius By default a cylindrical surface is used to create the helix. If the fourth parameter is set (the apex given in degree) a conical surface is used instead’
 class cadquery.Workplane(obj: Union[Vector, Location, Shape, Sketch])[source]
 class cadquery.Workplane(inPlane: Union[Plane, str] = 'XY', origin: Union[Tuple[float, float], Tuple[float, float, float], Vector] = (0, 0, 0), obj: Optional[Union[Vector, Location, Shape, Sketch]] = None)
Bases:
object
Defines a coordinate system in space, in which 2D coordinates can be used.
 Parameters
plane (a Plane object, or a string in (XYYZXZfrontbacktopbottomleftright)) – the plane in which the workplane will be done
origin (a 3tuple in global coordinates, or None to default to the origin) – the desired origin of the new workplane
obj (a CAD primitive, or None to use the centerpoint of the plane as the initial stack value.) – an object to use initially for the stack
 Raises
ValueError if the provided plane is not a plane, a valid named workplane
 Returns
A Workplane object, with coordinate system matching the supplied plane.
The most common use is:
s = Workplane("XY")
After creation, the stack contains a single point, the origin of the underlying plane, and the current point is on the origin.
Note
You can also create workplanes on the surface of existing faces using
CQ.workplane()
 __add__(toUnion: Union[Workplane, Solid, Compound]) T [source]
Syntactic sugar for union. Notice that
r = a + b
is equivalent tor = a.union(b)
andr = a  b
.
 __and__(toUnion: Union[Workplane, Solid, Compound]) T [source]
Syntactic sugar for intersect. Notice that
r = a & b
is equivalent tor = a.intersect(b)
.Example:
Box = Workplane("XY").box(1, 1, 1, centered=(False, False, False)) Sphere = Workplane("XY").sphere(1) result = Box & Sphere
 __init__(obj: Union[Vector, Location, Shape, Sketch]) None [source]
 __init__(inPlane: Union[Plane, str] = 'XY', origin: Union[Tuple[float, float], Tuple[float, float, float], Vector] = (0, 0, 0), obj: Optional[Union[Vector, Location, Shape, Sketch]] = None) None
make a workplane from a particular plane
 Parameters
inPlane (a Plane object, or a string in (XYYZXZfrontbacktopbottomleftright)) – the plane in which the workplane will be done
origin (a 3tuple in global coordinates, or None to default to the origin) – the desired origin of the new workplane
obj (a CAD primitive, or None to use the centerpoint of the plane as the initial stack value.) – an object to use initially for the stack
 Raises
ValueError if the provided plane is not a plane, or one of XYYZXZ
 Returns
A Workplane object, with coordinate system matching the supplied plane.
The most common use is:
s = Workplane("XY")
After creation, the stack contains a single point, the origin of the underlying plane, and the current point is on the origin.
 __or__(toUnion: Union[Workplane, Solid, Compound]) T [source]
Syntactic sugar for union. Notice that
r = a  b
is equivalent tor = a.union(b)
andr = a + b
.Example:
Box = Workplane("XY").box(1, 1, 1, centered=(False, False, False)) Sphere = Workplane("XY").sphere(1) result = Box  Sphere
 __sub__(toUnion: Union[Workplane, Solid, Compound]) T [source]
Syntactic sugar for cut. Notice that
r = a  b
is equivalent tor = a.cut(b)
.Example:
Box = Workplane("XY").box(1, 1, 1, centered=(False, False, False)) Sphere = Workplane("XY").sphere(1) result = Box  Sphere
 __weakref__
list of weak references to the object (if defined)
 add(obj: Workplane) T [source]
 add(obj: Union[Vector, Location, Shape, Sketch]) T
 add(obj: Iterable[Union[Vector, Location, Shape, Sketch]]) T
Adds an object or a list of objects to the stack
 Parameters
obj (a Workplane, CAD primitive, or list of CAD primitives) – an object to add
 Returns
a Workplane with the requested operation performed
If an Workplane object, the values of that object’s stack are added. If a list of cad primitives, they are all added. If a single CAD primitive then it is added.
Used in rare cases when you need to combine the results of several CQ results into a single Workplane object.
 all() List[T] [source]
Return a list of all CQ objects on the stack.
useful when you need to operate on the elements individually.
Contrast with vals, which returns the underlying objects for all of the items on the stack
 Parameters
self (T) –
 Return type
List[T]
 box(length: float, width: float, height: float, centered: Union[bool, Tuple[bool, bool, bool]] = True, combine: bool = True, clean: bool = True) T [source]
Return a 3d box with specified dimensions for each object on the stack.
 Parameters
self (T) –
length (float > 0) – box size in X direction
width (float > 0) – box size in Y direction
height (float > 0) – box size in Z direction
centered (Union[bool, Tuple[bool, bool, bool]]) – If True, the box will be centered around the reference point. If False, the corner of the box will be on the reference point and it will extend in the positive x, y and z directions. Can also use a 3tuple to specify centering along each axis.
combine (bool) – should the results be combined with other solids on the stack (and each other)?
clean (bool) – call
clean()
afterwards to have a clean shape
 Return type
T
One box is created for each item on the current stack. If no items are on the stack, one box using the current workplane center is created.
If combine is true, the result will be a single object on the stack. If a solid was found in the chain, the result is that solid with all boxes produced fused onto it otherwise, the result is the combination of all the produced boxes.
If combine is false, the result will be a list of the boxes produced.
Most often boxes form the basis for a part:
# make a single box with lower left corner at origin s = Workplane().box(1, 2, 3, centered=False)
But sometimes it is useful to create an array of them:
# create 4 small square bumps on a larger base plate: s = ( Workplane(). box(4, 4, 0.5). faces(">Z"). workplane(). rect(3, 3, forConstruction=True) .vertices() .box(0.25, 0.25, 0.25, combine=True) )
 cboreHole(diameter: float, cboreDiameter: float, cboreDepth: float, depth: Optional[float] = None, clean: bool = True) T [source]
Makes a counterbored hole for each item on the stack.
 Parameters
self (T) –
diameter (float > 0) – the diameter of the hole
cboreDiameter (float > 0 and > diameter) – the diameter of the cbore
cboreDepth (float > 0) – depth of the counterbore
depth (float > 0 or None to drill thru the entire part.) – the depth of the hole
clean (boolean) – call
clean()
afterwards to have a clean shape
 Return type
T
The surface of the hole is at the current workplane plane.
One hole is created for each item on the stack. A very common use case is to use a construction rectangle to define the centers of a set of holes, like so:
s = Workplane(Plane.XY()).box(2,4,0.5).faces(">Z").workplane() .rect(1.5,3.5,forConstruction=True) .vertices().cboreHole(0.125, 0.25,0.125,depth=None)
This sample creates a plate with a set of holes at the corners.
Plugin Note: this is one example of the power of plugins. Counterbored holes are quite time consuming to create, but are quite easily defined by users.
see
cskHole()
to make countersinks instead of counterbores
 center(x: float, y: float) T [source]
Shift local coordinates to the specified location.
The location is specified in terms of local coordinates.
 Parameters
self (T) –
x (float) – the new x location
y (float) – the new y location
 Returns
the workplane object, with the center adjusted.
 Return type
T
The current point is set to the new center. This method is useful to adjust the center point after it has been created automatically on a face, but not where you’d like it to be.
In this example, we adjust the workplane center to be at the corner of a cube, instead of the center of a face, which is the default:
#this workplane is centered at x=0.5,y=0.5, the center of the upper face s = Workplane().box(1,1,1).faces(">Z").workplane() s = s.center(0.5,0.5) # move the center to the corner t = s.circle(0.25).extrude(0.2) assert ( t.faces().size() == 9 ) # a cube with a cylindrical nub at the top right corner
The result is a cube with a round boss on the corner
 chamfer(length: float, length2: Optional[float] = None) T [source]
Chamfers a solid on the selected edges.
The edges on the stack are chamfered. The solid to which the edges belong must be in the parent chain of the selected edges.
Optional parameter length2 can be supplied with a different value than length for a chamfer that is shorter on one side longer on the other side.
 Parameters
self (T) –
length (positive float) – the length of the chamfer, must be greater than zero
length2 (positive float) – optional parameter for asymmetrical chamfer
 Raises
ValueError – if at least one edge is not selected
ValueError – if the solid containing the edge is not in the chain
 Returns
cq object with the resulting solid selected.
 Return type
T
This example will create a unit cube, with the top edges chamfered:
s = Workplane("XY").box(1,1,1).faces("+Z").chamfer(0.1)
This example will create chamfers longer on the sides:
s = Workplane("XY").box(1,1,1).faces("+Z").chamfer(0.2, 0.1)
 circle(radius: float, forConstruction: bool = False) T [source]
Make a circle for each item on the stack.
 Parameters
self (T) –
radius (float > 0) – radius of the circle
forConstruction (true if the wires are for reference, false if they are creating part geometry) – should the new wires be reference geometry only?
 Returns
a new CQ object with the created wires on the stack
 Return type
T
A common use case is to use a forconstruction rectangle to define the centers of a hole pattern:
s = Workplane().rect(4.0,4.0,forConstruction=True).vertices().circle(0.25)
Creates 4 circles at the corners of a square centered on the origin. Another common case is to use successive circle() calls to create concentric circles. This works because the center of a circle is its reference point:
s = Workplane().circle(2.0).circle(1.0)
Creates two concentric circles, which when extruded will form a ring.
 Future Enhancements:
better way to handle forConstruction project points not in the workplane plane onto the workplane plane
 clean() T [source]
Cleans the current solid by removing unwanted edges from the faces.
Normally you don’t have to call this function. It is automatically called after each related operation. You can disable this behavior with clean=False parameter if method has any. In some cases this can improve performance drastically but is generally disadvised since it may break some operations such as fillet.
Note that in some cases where lots of solid operations are chained, clean() may actually improve performance since the shape is ‘simplified’ at each step and thus next operation is easier.
Also note that, due to limitation of the underlying engine, clean may fail to produce a clean output in some cases such as spherical faces.
 Parameters
self (T) –
 Return type
T
 close() T [source]
End 2D construction, and attempt to build a closed wire.
 Returns
a CQ object with a completed wire on the stack, if possible.
 Parameters
self (T) –
 Return type
T
After 2D drafting with methods such as lineTo, threePointArc, tangentArcPoint and polyline, it is necessary to convert the edges produced by these into one or more wires.
When a set of edges is closed, cadQuery assumes it is safe to build the group of edges into a wire. This example builds a simple triangular prism:
s = Workplane().lineTo(1,0).lineTo(1,1).close().extrude(0.2)
 combine(clean: bool = True, glue: bool = False, tol: Optional[float] = None) T [source]
Attempts to combine all of the items on the stack into a single item. WARNING: all of the items must be of the same type!
 Parameters
self (T) –
clean (boolean) – call
clean()
afterwards to have a clean shapeglue (boolean) – use a faster gluing mode for nonoverlapping shapes (default False)
tol (float) – tolerance value for fuzzy bool operation mode (default None)
 Raises
ValueError if there are no items on the stack, or if they cannot be combined
 Returns
a CQ object with the resulting object selected
 Return type
T
 combineSolids(otherCQToCombine: Optional[Workplane] = None) Workplane [source]
!!!DEPRECATED!!! use union() Combines all solids on the current stack, and any context object, together into a single object.
After the operation, the returned solid is also the context solid.
 Parameters
otherCQToCombine (Optional[Workplane]) – another CadQuery to combine.
 Returns
a cQ object with the resulting combined solid on the stack.
 Return type
Most of the time, both objects will contain a single solid, which is combined and returned on the stack of the new object.
 compounds(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select compounds on the stack, optionally filtering the selection. If there are multiple objects on the stack, they are collected and a list of all the distinct compounds is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) – A selector
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains all of the distinct solids of all objects on the current stack, filtered by the provided selector.
 Return type
T
A compound contains multiple CAD primitives that resulted from a single operation, such as a union, cut, split, or fillet. Compounds can contain multiple edges, wires, or solids.
 consolidateWires() T [source]
Attempt to consolidate wires on the stack into a single. If possible, a new object with the results are returned. if not possible, the wires remain separated
 Parameters
self (T) –
 Return type
T
 copyWorkplane(obj: T) T [source]
Copies the workplane from obj.
 Parameters
obj (a CQ object) – an object to copy the workplane from
 Returns
a CQ object with obj’s workplane
 Return type
T
 cskHole(diameter: float, cskDiameter: float, cskAngle: float, depth: Optional[float] = None, clean: bool = True) T [source]
Makes a countersunk hole for each item on the stack.
 Parameters
self (T) –
diameter (float > 0) – the diameter of the hole
cskDiameter (float > 0 and > diameter) – the diameter of the countersink
cskAngle (float > 0) – angle of the countersink, in degrees ( 82 is common )
depth (float > 0 or None to drill thru the entire part.) – the depth of the hole
clean (boolean) – call
clean()
afterwards to have a clean shape
 Return type
T
The surface of the hole is at the current workplane.
One hole is created for each item on the stack. A very common use case is to use a construction rectangle to define the centers of a set of holes, like so:
s = Workplane(Plane.XY()).box(2,4,0.5).faces(">Z").workplane() .rect(1.5,3.5,forConstruction=True) .vertices().cskHole(0.125, 0.25,82,depth=None)
This sample creates a plate with a set of holes at the corners.
Plugin Note: this is one example of the power of plugins. CounterSunk holes are quite time consuming to create, but are quite easily defined by users.
see
cboreHole()
to make counterbores instead of countersinks
 cut(toCut: Union[Workplane, Solid, Compound], clean: bool = True) T [source]
Cuts the provided solid from the current solid, IE, perform a solid subtraction.
 Parameters
self (T) –
toCut (a solid object, or a Workplane object having a solid,) – object to cut
clean (bool) – call
clean()
afterwards to have a clean shape
 Raises
ValueError – if there is no solid to subtract from in the chain
 Returns
a Workplane object with the resulting object selected
 Return type
T
 cutBlind(until: Union[float, Literal['next', 'last'], Face], clean: bool = True, taper: Optional[float] = None) T [source]
Use all unextruded wires in the parent chain to create a prismatic cut from existing solid. You must define either :distance: , :untilNextFace: or :untilLastFace:
Similar to extrude, except that a solid in the parent chain is required to remove material from. cutBlind always removes material from a part.
 Parameters
self (T) –
until (Union[float, Literal['next', 'last'], Face]) – The distance to cut to, normal to the workplane plane. When a negative float is passed the cut extends this far in the opposite direction to the normal of the plane (i.e in the solid). The string “next” cuts until the next face orthogonal to the wire normal. “last” cuts to the last face. If a object of type Face is passed then the cut will extend until this face.
clean (boolean) – call
clean()
afterwards to have a clean shapetaper (float) – angle for optional tapered extrusion
 Raises
ValueError – if there is no solid to subtract from in the chain
 Returns
a CQ object with the resulting object selected
 Return type
T
see
cutThruAll()
to cut material from the entire part
 cutEach(fcn: Callable[[Location], Shape], useLocalCoords: bool = False, clean: bool = True) T [source]
Evaluates the provided function at each point on the stack (ie, eachpoint) and then cuts the result from the context solid. :param self: :param fcn: a function suitable for use in the eachpoint method: ie, that accepts a vector :param useLocalCoords: same as for
eachpoint()
:param boolean clean: callclean()
afterwards to have a clean shape :raises ValueError: if no solids or compounds are found in the stack or parent chain :return: a CQ object that contains the resulting solid
 cutThruAll(clean: bool = True, taper: float = 0) T [source]
Use all unextruded wires in the parent chain to create a prismatic cut from existing solid. Cuts through all material in both normal directions of workplane.
Similar to extrude, except that a solid in the parent chain is required to remove material from. cutThruAll always removes material from a part.
 Parameters
self (T) –
clean (boolean) – call
clean()
afterwards to have a clean shapetaper (float) –
 Raises
ValueError – if there is no solid to subtract from in the chain
ValueError – if there are no pending wires to cut with
 Returns
a CQ object with the resulting object selected
 Return type
T
see
cutBlind()
to cut material to a limited depth
 cylinder(height: float, radius: float, direct: ~cadquery.occ_impl.geom.Vector = Vector: (0.0, 0.0, 1.0), angle: float = 360, centered: ~typing.Union[bool, ~typing.Tuple[bool, bool, bool]] = True, combine: bool = True, clean: bool = True) T [source]
Returns a cylinder with the specified radius and height for each point on the stack
 Parameters
self (T) –
height (float > 0) – The height of the cylinder
radius (float > 0) – The radius of the cylinder
direct (A threetuple) – The direction axis for the creation of the cylinder
angle (float > 0) – The angle to sweep the cylinder arc through
centered (Union[bool, Tuple[bool, bool, bool]]) – If True, the cylinder will be centered around the reference point. If False, the corner of a bounding box around the cylinder will be on the reference point and it will extend in the positive x, y and z directions. Can also use a 3tuple to specify centering along each axis.
combine (true to combine shapes, false otherwise) – Whether the results should be combined with other solids on the stack (and each other)
clean (bool) – call
clean()
afterwards to have a clean shape
 Returns
A cylinder object for each point on the stack
 Return type
T
One cylinder is created for each item on the current stack. If no items are on the stack, one cylinder is created using the current workplane center.
If combine is true, the result will be a single object on the stack. If a solid was found in the chain, the result is that solid with all cylinders produced fused onto it otherwise, the result is the combination of all the produced cylinders.
If combine is false, the result will be a list of the cylinders produced.
 each(callback: Callable[[Union[Vector, Location, Shape, Sketch]], Shape], useLocalCoordinates: bool = False, combine: Union[bool, Literal['cut', 'a', 's']] = True, clean: bool = True) T [source]
Runs the provided function on each value in the stack, and collects the return values into a new CQ object.
Special note: a newly created workplane always has its center point as its only stack item
 Parameters
self (T) –
callBackFunction – the function to call for each item on the current stack.
useLocalCoordinates (boolean) – should values be converted from local coordinates first?
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shapecallback (Callable[[Union[Vector, Location, Shape, Sketch]], Shape]) –
 Return type
T
The callback function must accept one argument, which is the item on the stack, and return one object, which is collected. If the function returns None, nothing is added to the stack. The object passed into the callBackFunction is potentially transformed to local coordinates, if useLocalCoordinates is true
useLocalCoordinates is very useful for plugin developers.
If false, the callback function is assumed to be working in global coordinates. Objects created are added asis, and objects passed into the function are sent in using global coordinates
If true, the calling function is assumed to be working in local coordinates. Objects are transformed to local coordinates before they are passed into the callback method, and result objects are transformed to global coordinates after they are returned.
This allows plugin developers to create objects in local coordinates, without worrying about the fact that the working plane is different than the global coordinate system.
TODO: wrapper object for Wire will clean up forConstruction flag everywhere
 eachpoint(callback: Callable[[Location], Shape], useLocalCoordinates: bool = False, combine: Union[bool, Literal['cut', 'a', 's']] = False, clean: bool = True) T [source]
Same as each(), except each item on the stack is converted into a point before it is passed into the callback function.
 Returns
CadQuery object which contains a list of vectors (points ) on its stack.
 Parameters
self (T) –
useLocalCoordinates (boolean) – should points be in local or global coordinates
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shape
 Return type
T
The resulting object has a point on the stack for each object on the original stack. Vertices and points remain a point. Faces, Wires, Solids, Edges, and Shells are converted to a point by using their center of mass.
If the stack has zero length, a single point is returned, which is the center of the current workplane/coordinate system
 edges(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select the edges of objects on the stack, optionally filtering the selection. If there are multiple objects on the stack, the edges of all objects are collected and a list of all the distinct edges is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) – A selector
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains all of the distinct edges of all objects on the current stack, filtered by the provided selector.
 Return type
T
If there are no edges for any objects on the current stack, an empty CQ object is returned
The typical use is to select the edges of a single object on the stack. For example:
CQ(aCube).faces("+Z").edges().size()
returns 4, because a cube has one face with a normal in the +Z direction. Similarly:
CQ(aCube).edges().size()
returns 12, because a cube has a total of 12 edges, And:
CQ(aCube).edges("Z").size()
returns 4, because a cube has 4 edges parallel to the z direction
 ellipse(x_radius: float, y_radius: float, rotation_angle: float = 0.0, forConstruction: bool = False) T [source]
Make an ellipse for each item on the stack.
 Parameters
self (T) –
x_radius (float > 0) – x radius of the ellipse (xaxis of plane the ellipse should lie in)
y_radius (float > 0) – y radius of the ellipse (yaxis of plane the ellipse should lie in)
rotation_angle (float) – angle to rotate the ellipse (0 = no rotation = default)
forConstruction (true if the wires are for reference, false if they are creating part geometry) – should the new wires be reference geometry only?
 Returns
a new CQ object with the created wires on the stack
 Return type
T
NOTE Due to a bug in opencascade (https://tracker.dev.opencascade.org/view.php?id=31290) the center of mass (equals center for next shape) is shifted. To create concentric ellipses use Workplane(“XY”)
.center(10, 20).ellipse(100,10) .center(0, 0).ellipse(50, 5)
 ellipseArc(x_radius: float, y_radius: float, angle1: float = 360, angle2: float = 360, rotation_angle: float = 0.0, sense: Literal[ 1, 1] = 1, forConstruction: bool = False, startAtCurrent: bool = True, makeWire: bool = False) T [source]
Draw an elliptical arc with x and y radiuses either with start point at current point or or current point being the center of the arc
 Parameters
self (T) –
x_radius (float) – x radius of the ellipse (along the xaxis of plane the ellipse should lie in)
y_radius (float) – y radius of the ellipse (along the yaxis of plane the ellipse should lie in)
angle1 (float) – start angle of arc
angle2 (float) – end angle of arc (angle2 == angle1 return closed ellipse = default)
rotation_angle (float) – angle to rotate the created ellipse / arc
sense (Literal[1, 1]) – clockwise (1) or counter clockwise (1)
startAtCurrent (bool) – True: start point of arc is moved to current point; False: center of arc is on current point
makeWire (bool) – convert the resulting arc edge to a wire
forConstruction (bool) –
 Return type
T
 end(n: int = 1) Workplane [source]
Return the nth parent of this CQ element :param n: number of ancestor to return (default: 1) :rtype: a CQ object :raises: ValueError if there are no more parents in the chain.
For example:
CQ(obj).faces("+Z").vertices().end()
will return the same as:
CQ(obj).faces("+Z")
 Parameters
n (int) –
 Return type
 exportSvg(fileName: str) None [source]
Exports the first item on the stack as an SVG file
For testing purposes mainly.
 Parameters
fileName (String, absolute path to the file) – the filename to export
 Return type
None
 extrude(until: Union[float, Literal['next', 'last'], Face], combine: Union[bool, Literal['cut', 'a', 's']] = True, clean: bool = True, both: bool = False, taper: Optional[float] = None) T [source]
Use all unextruded wires in the parent chain to create a prismatic solid.
 Parameters
self (T) –
until (Union[float, Literal['next', 'last'], Face]) – The distance to extrude, normal to the workplane plane. When a float is passed, the extrusion extends this far and a negative value is in the opposite direction to the normal of the plane. The string “next” extrudes until the next face orthogonal to the wire normal. “last” extrudes to the last face. If a object of type Face is passed then the extrusion will extend until this face. Note that the Workplane must contain a Solid for extruding to a given face.
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shapeboth (boolean) – extrude in both directions symmetrically
taper (float) – angle for optional tapered extrusion
 Returns
a CQ object with the resulting solid selected.
 Return type
T
The returned object is always a CQ object, and depends on whether combine is True, and whether a context solid is already defined:
if combine is False, the new value is pushed onto the stack. Note that when extruding
until a specified face, combine can not be False
if combine is true, the value is combined with the context solid if it exists, and the resulting solid becomes the new context solid.
 faces(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select the faces of objects on the stack, optionally filtering the selection. If there are multiple objects on the stack, the faces of all objects are collected and a list of all the distinct faces is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) – A selector
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains all of the distinct faces of all objects on the current stack, filtered by the provided selector.
 Return type
T
If there are no vertices for any objects on the current stack, an empty CQ object is returned.
The typical use is to select the faces of a single object on the stack. For example:
CQ(aCube).faces("+Z").size()
returns 1, because a cube has one face with a normal in the +Z direction. Similarly:
CQ(aCube).faces().size()
returns 6, because a cube has a total of 6 faces, And:
CQ(aCube).faces("Z").size()
returns 2, because a cube has 2 faces having normals parallel to the z direction
 fillet(radius: float) T [source]
Fillets a solid on the selected edges.
The edges on the stack are filleted. The solid to which the edges belong must be in the parent chain of the selected edges.
 Parameters
self (T) –
radius (positive float) – the radius of the fillet, must be > zero
 Raises
ValueError – if at least one edge is not selected
ValueError – if the solid containing the edge is not in the chain
 Returns
cq object with the resulting solid selected.
 Return type
T
This example will create a unit cube, with the top edges filleted:
s = Workplane().box(1,1,1).faces("+Z").edges().fillet(0.1)
 findFace(searchStack: bool = True, searchParents: bool = True) Face [source]
Finds the first face object in the chain, searching from the current node backwards through parents until one is found.
 Parameters
searchStack (bool) – should objects on the stack be searched first.
searchParents (bool) – should parents be searched?
 Returns
A face or None if no face is found.
 Return type
 findSolid(searchStack: bool = True, searchParents: bool = True) Union[Solid, Compound] [source]
Finds the first solid object in the chain, searching from the current node backwards through parents until one is found.
 Parameters
searchStack (bool) – should objects on the stack be searched first?
searchParents (bool) – should parents be searched?
 Raises
ValueError – if no solid is found
 Return type
This function is very important for chains that are modifying a single parent object, most often a solid.
Most of the time, a chain defines or selects a solid, and then modifies it using workplanes or other operations.
Plugin Developers should make use of this method to find the solid that should be modified, if the plugin implements a unary operation, or if the operation will automatically merge its results with an object already on the stack.
 first() T [source]
Return the first item on the stack :returns: the first item on the stack. :rtype: a CQ object
 Parameters
self (T) –
 Return type
T
 hLine(distance: float, forConstruction: bool = False) T [source]
Make a horizontal line from the current point the provided distance
 Parameters
self (T) –
distance (float) –
distance from current point
forConstruction (bool) –
 Returns
the Workplane object with the current point at the end of the new line
 Return type
T
 hLineTo(xCoord: float, forConstruction: bool = False) T [source]
Make a horizontal line from the current point to the provided x coordinate.
Useful if it is more convenient to specify the end location rather than distance, as in
hLine()
 Parameters
self (T) –
xCoord (float) – x coordinate for the end of the line
forConstruction (bool) –
 Returns
the Workplane object with the current point at the end of the new line
 Return type
T
 hole(diameter: float, depth: Optional[float] = None, clean: bool = True) T [source]
Makes a hole for each item on the stack.
 Parameters
self (T) –
diameter (float > 0) – the diameter of the hole
depth (float > 0 or None to drill thru the entire part.) – the depth of the hole
clean (boolean) – call
clean()
afterwards to have a clean shape
 Return type
T
The surface of the hole is at the current workplane.
One hole is created for each item on the stack. A very common use case is to use a construction rectangle to define the centers of a set of holes, like so:
s = Workplane(Plane.XY()).box(2,4,0.5).faces(">Z").workplane() .rect(1.5,3.5,forConstruction=True) .vertices().hole(0.125, 0.25,82,depth=None)
This sample creates a plate with a set of holes at the corners.
Plugin Note: this is one example of the power of plugins. CounterSunk holes are quite time consuming to create, but are quite easily defined by users.
see
cboreHole()
andcskHole()
to make counterbores or countersinks
 interpPlate(surf_edges: Union[Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]], Sequence[Edge]], surf_pts: Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]] = [], thickness: float = 0, combine: bool = False, clean: bool = True, degree: int = 3, nbPtsOnCur: int = 15, nbIter: int = 2, anisotropy: bool = False, tol2d: float = 1e05, tol3d: float = 0.0001, tolAng: float = 0.01, tolCurv: float = 0.1, maxDeg: int = 8, maxSegments: int = 9) T [source]
Returns a plate surface that is ‘thickness’ thick, enclosed by ‘surf_edge_pts’ points, and going through ‘surf_pts’ points. Using pushpoints directly with interpPlate and combine=True, can be very resources intensive depending on the complexity of the shape. In this case set combine=False.
 Parameters
self (T) –
surf_edges (Union[Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]], Sequence[Edge]]) –
surf_pts (Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]]) –
thickness (float) –
combine (bool) –
clean (bool) –
degree (int) –
nbPtsOnCur (int) –
nbIter (int) –
anisotropy (bool) –
tol2d (float) –
tol3d (float) –
tolAng (float) –
tolCurv (float) –
maxDeg (int) –
maxSegments (int) –
 Return type
T
:param surf_edges :type 1 surf_edges: list of [x,y,z] float ordered coordinates :type 2 surf_edges: list of ordered or unordered CadQuery wires :param surf_pts = [] (uses only edges if []) :type surf_pts: list of [x,y,z] float coordinates :param thickness = 0 (returns 2D surface if 0) :type thickness: float (may be negative or positive depending on thickening direction) :param combine: should the results be combined with other solids on the stack
(and each other)?
 Parameters
clean (boolean) – call
clean()
afterwards to have a clean shapeself (T) –
surf_edges (Union[Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]], Sequence[Edge]]) –
surf_pts (Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]]) –
thickness (float) –
combine (true to combine shapes, false otherwise.) –
degree (int) –
nbPtsOnCur (int) –
nbIter (int) –
anisotropy (bool) –
tol2d (float) –
tol3d (float) –
tolAng (float) –
tolCurv (float) –
maxDeg (int) –
maxSegments (int) –
 Return type
T
:param Degree = 3 (OCCT default) :type Degree: Integer >= 2 :param NbPtsOnCur = 15 (OCCT default) :type: NbPtsOnCur Integer >= 15 :param NbIter = 2 (OCCT default) :type: NbIterInteger >= 2 :param anisotropy = False (OCCT default) :type anisotropy: Boolean :param: Tol2d = 0.00001 (OCCT default) :type Tol2d: float > 0 :param Tol3d = 0.0001 (OCCT default) :type Tol3dReal: float > 0 :param TolAng = 0.01 (OCCT default) :type TolAngReal: float > 0 :param TolCurv = 0.1 (OCCT default) :type TolCurvReal: float > 0 :param MaxDeg = 8 (OCCT default) :type MaxDegInteger: Integer >= 2 (?) :param MaxSegments = 9 (OCCT default) :type MaxSegments: Integer >= 2 (?)
 intersect(toIntersect: Union[Workplane, Solid, Compound], clean: bool = True) T [source]
Intersects the provided solid from the current solid.
 Parameters
self (T) –
toIntersect (a solid object, or a Workplane object having a solid,) – object to intersect
clean (bool) – call
clean()
afterwards to have a clean shape
 Raises
ValueError – if there is no solid to intersect with in the chain
 Returns
a Workplane object with the resulting object selected
 Return type
T
 item(i: int) T [source]
Return the ith item on the stack. :rtype: a CQ object
 Parameters
self (T) –
i (int) –
 Return type
T
 largestDimension() float [source]
Finds the largest dimension in the stack.
Used internally to create thru features, this is how you can compute how long or wide a feature must be to make sure to cut through all of the material
 Raises
ValueError – if no solids or compounds are found
 Returns
A value representing the largest dimension of the first solid on the stack
 Return type
float
 last() T [source]
Return the last item on the stack. :rtype: a CQ object
 Parameters
self (T) –
 Return type
T
 line(xDist: float, yDist: float, forConstruction: bool = False) T [source]
Make a line from the current point to the provided point, using dimensions relative to the current point
 Parameters
self (T) –
xDist (float) – x distance from current point
yDist (float) – y distance from current point
forConstruction (bool) –
 Returns
the workplane object with the current point at the end of the new line
 Return type
T
see
lineTo()
if you want to use absolute coordinates to make a line instead.
 lineTo(x: float, y: float, forConstruction: bool = False) T [source]
Make a line from the current point to the provided point
 Parameters
self (T) –
x (float) – the x point, in workplane plane coordinates
y (float) – the y point, in workplane plane coordinates
forConstruction (bool) –
 Returns
the Workplane object with the current point at the end of the new line
 Return type
T
see
line()
if you want to use relative dimensions to make a line instead.
 loft(ruled: bool = False, combine: Union[bool, Literal['cut', 'a', 's']] = True, clean: bool = True) T [source]
Make a lofted solid, through the set of wires.
 Parameters
self (T) –
ruled (boolean) – When set to True connects each section linearly and without continuity
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shape
 Returns
a Workplane object containing the created loft
 Return type
T
 mirror(mirrorPlane: Union[Literal['XY', 'YX', 'XZ', 'ZX', 'YZ', 'ZY'], Tuple[float, float], Tuple[float, float, float], Vector, Face, Workplane] = 'XY', basePointVector: Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]] = None, union: bool = False) T [source]
Mirror a single CQ object.
 Parameters
self (T) –
mirrorPlane (string, one of "XY", "YX", "XZ", "ZX", "YZ", "ZY" the planes) – the plane to mirror about
basePointVector (Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]]) –
union (bool) –
 Return type
T
or the normal vector of the plane eg (1,0,0) or a Face object :param basePointVector: the base point to mirror about (this is overwritten if a Face is passed) :type basePointVector: tuple :param union: If true will perform a union operation on the mirrored object :type union: bool
 mirrorX() T [source]
Mirror entities around the x axis of the workplane plane.
 Returns
a new object with any free edges consolidated into as few wires as possible.
 Parameters
self (T) –
 Return type
T
All free edges are collected into a wire, and then the wire is mirrored, and finally joined into a new wire
Typically used to make creating wires with symmetry easier.
 mirrorY() T [source]
Mirror entities around the y axis of the workplane plane.
 Returns
a new object with any free edges consolidated into as few wires as possible.
 Parameters
self (T) –
 Return type
T
All free edges are collected into a wire, and then the wire is mirrored, and finally joined into a new wire
Typically used to make creating wires with symmetry easier. This line of code:
s = Workplane().lineTo(2,2).threePointArc((3,1),(2,0)).mirrorX().extrude(0.25)
Produces a flat, heart shaped object
 move(xDist: float = 0, yDist: float = 0) T [source]
Move the specified distance from the current point, without drawing.
 Parameters
self (T) –
xDist (float, or none for zero) – desired x distance, in local coordinates
yDist (float, or none for zero.) – desired y distance, in local coordinates
 Return type
T
Not to be confused with
center()
, which moves the center of the entire workplane, this method only moves the current point ( and therefore does not affect objects already drawn ).See
moveTo()
to do the same thing but using absolute coordinates
 moveTo(x: float = 0, y: float = 0) T [source]
Move to the specified point, without drawing.
 Parameters
self (T) –
x (float, or none for zero) – desired x location, in local coordinates
y (float, or none for zero.) – desired y location, in local coordinates
 Return type
T
Not to be confused with
center()
, which moves the center of the entire workplane, this method only moves the current point ( and therefore does not affect objects already drawn ).See
move()
to do the same thing but using relative dimensions
 newObject(objlist: Iterable[Union[Vector, Location, Shape, Sketch]]) T [source]
Create a new workplane object from this one.
Overrides CQ.newObject, and should be used by extensions, plugins, and subclasses to create new objects.
 Parameters
self (T) –
objlist (a list of CAD primitives) – new objects to put on the stack
 Returns
a new Workplane object with the current workplane as a parent.
 Return type
T
 offset2D(d: float, kind: Literal['arc', 'intersection', 'tangent'] = 'arc', forConstruction: bool = False) T [source]
Creates a 2D offset wire.
 Parameters
self (T) –
d (float) – thickness. Negative thickness denotes offset to inside.
kind (Literal['arc', 'intersection', 'tangent']) – offset kind. Use “arc” for rounded and “intersection” for sharp edges (default: “arc”)
forConstruction (bool) – Should the result be added to pending wires?
 Returns
CQ object with resulting wire(s).
 Return type
T
 parametricCurve(func: Callable[[float], Union[Tuple[float, float], Tuple[float, float, float], Vector]], N: int = 400, start: float = 0, stop: float = 1, tol: float = 1e06, minDeg: int = 1, maxDeg: int = 6, smoothing: Optional[Tuple[float, float, float]] = (1, 1, 1), makeWire: bool = True) T [source]
Create a spline curve approximating the provided function.
 Parameters
self (T) –
func (float > (float,float,float)) – function f(t) that will generate (x,y,z) pairs
N (int) – number of points for discretization
start (float) – starting value of the parameter t
stop (float) – final value of the parameter t
tol (float) – tolerance of the algorithm (default: 1e6)
minDeg (int) – minimum spline degree (default: 1)
maxDeg (int) – maximum spline degree (default: 6)
smoothing (Optional[Tuple[float, float, float]]) – optional parameters for the variational smoothing algorithm (default: (1,1,1))
makeWire (bool) – convert the resulting spline edge to a wire
 Returns
a Workplane object with the current point unchanged
 Return type
T
 parametricSurface(func: Callable[[float, float], Union[Tuple[float, float], Tuple[float, float, float], Vector]], N: int = 20, start: float = 0, stop: float = 1, tol: float = 0.01, minDeg: int = 1, maxDeg: int = 6, smoothing: Optional[Tuple[float, float, float]] = (1, 1, 1)) T [source]
Create a spline surface approximating the provided function.
 Parameters
self (T) –
func ((float,float) > (float,float,float)) – function f(u,v) that will generate (x,y,z) pairs
N (int) – number of points for discretization in one direction
start (float) – starting value of the parameters u,v
stop (float) – final value of the parameters u,v
tol (float) – tolerance used by the approximation algorithm (default: 1e3)
minDeg (int) – minimum spline degree (default: 1)
maxDeg (int) – maximum spline degree (default: 3)
smoothing (Optional[Tuple[float, float, float]]) – optional parameters for the variational smoothing algorithm (default: (1,1,1))
 Returns
a Workplane object with the current point unchanged
 Return type
T
This method might be unstable and may require tuning of the tol parameter.
 placeSketch(*sketches: Sketch) T [source]
Place the provided sketch(es) based on the current items on the stack.
 Returns
Workplane object with the sketch added.
 Parameters
self (T) –
sketches (Sketch) –
 Return type
T
 polarArray(radius: float, startAngle: float, angle: float, count: int, fill: bool = True, rotate: bool = True) T [source]
Creates a polar array of points and pushes them onto the stack. The zero degree reference angle is located along the local Xaxis.
 Parameters
self (T) –
radius (float) – Radius of the array.
startAngle (float) – Starting angle (degrees) of array. Zero degrees is situated along the local Xaxis.
angle (float) – The angle (degrees) to fill with elements. A positive value will fill in the counterclockwise direction. If fill is False, angle is the angle between elements.
count (int) – Number of elements in array. (count >= 1)
fill (bool) – Interpret the angle as total if True (default: True).
rotate (bool) – Rotate every item (default: True).
 Return type
T
 polarLine(distance: float, angle: float, forConstruction: bool = False) T [source]
Make a line of the given length, at the given angle from the current point
 Parameters
self (T) –
distance (float) – distance of the end of the line from the current point
angle (float) – angle of the vector to the end of the line with the xaxis
forConstruction (bool) –
 Returns
the Workplane object with the current point at the end of the new line
 Return type
T
 polarLineTo(distance: float, angle: float, forConstruction: bool = False) T [source]
Make a line from the current point to the given polar coordinates
Useful if it is more convenient to specify the end location rather than the distance and angle from the current point
 Parameters
self (T) –
distance (float) – distance of the end of the line from the origin
angle (float) – angle of the vector to the end of the line with the xaxis
forConstruction (bool) –
 Returns
the Workplane object with the current point at the end of the new line
 Return type
T
 polygon(nSides: int, diameter: float, forConstruction: bool = False, circumscribed: bool = False) T [source]
Make a polygon for each item on the stack.
By default, each polygon is created by inscribing it in a circle of the specified diameter, such that the first vertex is oriented in the x direction. Alternatively, each polygon can be created by circumscribing it around a circle of the specified diameter, such that the midpoint of the first edge is oriented in the x direction. Circumscribed polygons are thus rotated by pi/nSides radians relative to the inscribed polygon. This ensures the extent of the polygon along the positive xaxis is always known. This has the advantage of not requiring additional formulae for purposes such as tiling on the xaxis (at least for even sided polygons).
 Parameters
self (T) –
nSides (int) – number of sides, must be >= 3
diameter (float) – the diameter of the circle for constructing the polygon
circumscribed (true to create the polygon by circumscribing it about a circle, false to create the polygon by inscribing it in a circle) – circumscribe the polygon about a circle
forConstruction (bool) –
 Returns
a polygon wire
 Return type
T
 polyline(listOfXYTuple: Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]], forConstruction: bool = False, includeCurrent: bool = False) T [source]
Create a polyline from a list of points
 Parameters
self (T) –
listOfXYTuple (list of 2tuples) – a list of points in Workplane coordinates
forConstruction (true if the edges are for reference, false if they are for creating geometry part geometry) – whether or not the edges are used for reference
includeCurrent (bool) – use current point as a starting point of the polyline
 Returns
a new CQ object with a list of edges on the stack
 Return type
T
NOTE most commonly, the resulting wire should be closed.
 pushPoints(pntList: Iterable[Union[Tuple[float, float], Tuple[float, float, float], Vector, Location]]) T [source]
Pushes a list of points onto the stack as vertices. The points are in the 2D coordinate space of the workplane face
 Parameters
self (T) –
pntList (list of 2tuples, in local coordinates) – a list of points to push onto the stack
 Returns
a new workplane with the desired points on the stack.
 Return type
T
A common use is to provide a list of points for a subsequent operation, such as creating circles or holes. This example creates a cube, and then drills three holes through it, based on three points:
s = Workplane().box(1,1,1).faces(">Z").workplane(). pushPoints([(0.3,0.3),(0.3,0.3),(0,0)]) body = s.circle(0.05).cutThruAll()
Here the circle function operates on all three points, and is then extruded to create three holes. See
circle()
for how it works.
 radiusArc(endPoint: Union[Tuple[float, float], Tuple[float, float, float], Vector], radius: float, forConstruction: bool = False) T [source]
Draw an arc from the current point to endPoint with an arc defined by the radius.
 Parameters
self (T) –
endPoint (2tuple, in workplane coordinates) – end point for the arc
radius (float, the radius of the arc between start point and end point.) – the radius of the arc
forConstruction (bool) –
 Returns
a workplane with the current point at the end of the arc
 Return type
T
Given that a closed contour is drawn clockwise; A positive radius means convex arc and negative radius means concave arc.
 rarray(xSpacing: float, ySpacing: float, xCount: int, yCount: int, center: Union[bool, Tuple[bool, bool]] = True) T [source]
Creates an array of points and pushes them onto the stack. If you want to position the array at another point, create another workplane that is shifted to the position you would like to use as a reference
 Parameters
self (T) –
xSpacing (float) – spacing between points in the x direction ( must be > 0)
ySpacing (float) – spacing between points in the y direction ( must be > 0)
xCount (int) – number of points ( > 0 )
yCount (int) – number of points ( > 0 )
center (Union[bool, Tuple[bool, bool]]) – If True, the array will be centered around the workplane center. If False, the lower corner will be on the reference point and the array will extend in the positive x and y directions. Can also use a 2tuple to specify centering along each axis.
 Return type
T
 rect(xLen: float, yLen: float, centered: Union[bool, Tuple[bool, bool]] = True, forConstruction: bool = False) T [source]
Make a rectangle for each item on the stack.
 Parameters
self (T) –
xLen (float) – length in the x direction (in workplane coordinates)
yLen (float) – length in the y direction (in workplane coordinates)
centered (Union[bool, Tuple[bool, bool]]) – If True, the rectangle will be centered around the reference point. If False, the corner of the rectangle will be on the reference point and it will extend in the positive x and y directions. Can also use a 2tuple to specify centering along each axis.
forConstruction (true if the wires are for reference, false if they are creating part geometry) – should the new wires be reference geometry only?
 Returns
a new CQ object with the created wires on the stack
 Return type
T
A common use case is to use a forconstruction rectangle to define the centers of a hole pattern:
s = Workplane().rect(4.0,4.0,forConstruction=True).vertices().circle(0.25)
Creates 4 circles at the corners of a square centered on the origin.
Negative values for xLen and yLen are permitted, although they only have an effect when centered is False.
 Future Enhancements:
project points not in the workplane plane onto the workplane plane
 revolve(angleDegrees: float = 360.0, axisStart: Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]] = None, axisEnd: Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]] = None, combine: Union[bool, Literal['cut', 'a', 's']] = True, clean: bool = True) T [source]
Use all unrevolved wires in the parent chain to create a solid.
 Parameters
self (T) –
angleDegrees (float, anything less than 360 degrees will leave the shape open) – the angle to revolve through.
axisStart (tuple, a two tuple) – the start point of the axis of rotation
axisEnd (tuple, a two tuple) – the end point of the axis of rotation
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shape
 Returns
a CQ object with the resulting solid selected.
 Return type
T
The returned object is always a CQ object, and depends on whether combine is True, and whether a context solid is already defined:
if combine is False, the new value is pushed onto the stack.
if combine is true, the value is combined with the context solid if it exists, and the resulting solid becomes the new context solid.
Note
Keep in mind that axisStart and axisEnd are defined relative to the current Workplane center position. So if for example you want to revolve a circle centered at (10,0,0) around the Y axis, be sure to either
move()
(ormoveTo()
) the current Workplane position or specify axisStart and axisEnd with the correct vector position. In this example (0,0,0), (0,1,0) as axis coords would fail.
 rotate(axisStartPoint: Union[Tuple[float, float], Tuple[float, float, float], Vector], axisEndPoint: Union[Tuple[float, float], Tuple[float, float, float], Vector], angleDegrees: float) T [source]
Returns a copy of all of the items on the stack rotated through and angle around the axis of rotation.
 Parameters
self (T) –
axisStartPoint (a 3tuple of floats) – The first point of the axis of rotation
axisEndPoint (a 3tuple of floats) – The second point of the axis of rotation
angleDegrees (float) – the rotation angle, in degrees
 Returns
a CQ object
 Return type
T
 rotateAboutCenter(axisEndPoint: Union[Tuple[float, float], Tuple[float, float, float], Vector], angleDegrees: float) T [source]
Rotates all items on the stack by the specified angle, about the specified axis
The center of rotation is a vector starting at the center of the object on the stack, and ended at the specified point.
 Parameters
self (T) –
axisEndPoint (a threetuple in global coordinates) – the second point of axis of rotation
angleDegrees (float) – the rotation angle, in degrees
 Returns
a CQ object, with all items rotated.
 Return type
T
WARNING: This version returns the same cq object instead of a new one– the old object is not accessible.
 Future Enhancements:
A version of this method that returns a transformed copy, rather than modifying the originals
This method doesn’t expose a very good interface, because the axis of rotation could be inconsistent between multiple objects. This is because the beginning of the axis is variable, while the end is fixed. This is fine when operating on one object, but is not cool for multiple.
 sagittaArc(endPoint: Union[Tuple[float, float], Tuple[float, float, float], Vector], sag: float, forConstruction: bool = False) T [source]
Draw an arc from the current point to endPoint with an arc defined by the sag (sagitta).
 Parameters
self (T) –
endPoint (2tuple, in workplane coordinates) – end point for the arc
sag (float, perpendicular distance from arc center to arc baseline.) – the sagitta of the arc
forConstruction (bool) –
 Returns
a workplane with the current point at the end of the arc
 Return type
T
The sagitta is the distance from the center of the arc to the arc base. Given that a closed contour is drawn clockwise; A positive sagitta means convex arc and negative sagitta means concave arc. See “https://en.wikipedia.org/wiki/Sagitta_(geometry)” for more information.
 section(height: float = 0.0) T [source]
Slices current solid at the given height.
 Parameters
self (T) –
height (float) – height to slice at (default: 0)
 Raises
ValueError – if no solids or compounds are found
 Returns
a CQ object with the resulting face(s).
 Return type
T
 shell(thickness: float, kind: Literal['arc', 'intersection'] = 'arc') T [source]
Remove the selected faces to create a shell of the specified thickness.
To shell, first create a solid, and in the same chain select the faces you wish to remove.
 Parameters
self (T) –
thickness (float) – thickness of the desired shell. Negative values shell inwards, positive values shell outwards.
kind (Literal['arc', 'intersection']) – kind of join, arc or intersection (default: arc).
 Raises
ValueError – if the current stack contains objects that are not faces of a solid further up in the chain.
 Returns
a CQ object with the resulting shelled solid selected.
 Return type
T
This example will create a hollowed out unit cube, where the top most face is open, and all other walls are 0.2 units thick:
Workplane().box(1, 1, 1).faces("+Z").shell(0.2)
You can also select multiple faces at once. Here is an example that creates a threewalled corner, by removing three faces of a cube:
Workplane().box(10, 10, 10).faces(">Z or >X or <Y").shell(1)
Note: When sharp edges are shelled inwards, they remain sharp corners, but outward shells are automatically filleted (unless kind=”intersection”), because an outward offset from a corner generates a radius.
 shells(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select the shells of objects on the stack, optionally filtering the selection. If there are multiple objects on the stack, the shells of all objects are collected and a list of all the distinct shells is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) – A selector
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains all of the distinct solids of all objects on the current stack, filtered by the provided selector.
 Return type
T
If there are no shells for any objects on the current stack, an empty CQ object is returned
Most solids will have a single shell, which represents the outer surface. A shell will typically be composed of multiple faces.
 sketch() Sketch [source]
Initialize and return a sketch
 Returns
Sketch object with the current workplane as a parent.
 Parameters
self (T) –
 Return type
 slot2D(length: float, diameter: float, angle: float = 0) T [source]
Creates a rounded slot for each point on the stack.
 Parameters
self (T) –
diameter (float) – desired diameter, or width, of slot
length (float) – desired end to end length of slot
angle (float) – angle of slot in degrees, with 0 being along xaxis
 Returns
a new CQ object with the created wires on the stack
 Return type
T
Can be used to create arrays of slots, such as in cooling applications:
result = cq.Workplane(“XY”).box(10,25,1).rarray(1,2,1,10).slot2D(8,1,0).cutThruAll()
 solids(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select the solids of objects on the stack, optionally filtering the selection. If there are multiple objects on the stack, the solids of all objects are collected and a list of all the distinct solids is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) – A selector
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains all of the distinct solids of all objects on the current stack, filtered by the provided selector.
 Return type
T
If there are no solids for any objects on the current stack, an empty CQ object is returned
The typical use is to select the a single object on the stack. For example:
CQ(aCube).solids().size()
returns 1, because a cube consists of one solid.
It is possible for single CQ object ( or even a single CAD primitive ) to contain multiple solids.
 sphere(radius: float, direct: Union[Tuple[float, float], Tuple[float, float, float], Vector] = (0, 0, 1), angle1: float =  90, angle2: float = 90, angle3: float = 360, centered: Union[bool, Tuple[bool, bool, bool]] = True, combine: bool = True, clean: bool = True) T [source]
Returns a 3D sphere with the specified radius for each point on the stack.
 Parameters
self (T) –
radius (float > 0) – The radius of the sphere
direct (A threetuple) – The direction axis for the creation of the sphere
angle1 (float > 0) – The first angle to sweep the sphere arc through
angle2 (float > 0) – The second angle to sweep the sphere arc through
angle3 (float > 0) – The third angle to sweep the sphere arc through
centered (Union[bool, Tuple[bool, bool, bool]]) – If True, the sphere will be centered around the reference point. If False, the corner of a bounding box around the sphere will be on the reference point and it will extend in the positive x, y and z directions. Can also use a 3tuple to specify centering along each axis.
combine (true to combine shapes, false otherwise) – Whether the results should be combined with other solids on the stack (and each other)
clean (bool) – call
clean()
afterwards to have a clean shape
 Returns
A sphere object for each point on the stack
 Return type
T
One sphere is created for each item on the current stack. If no items are on the stack, one box using the current workplane center is created.
If combine is true, the result will be a single object on the stack. If a solid was found in the chain, the result is that solid with all spheres produced fused onto it otherwise, the result is the combination of all the produced spheres.
If combine is false, the result will be a list of the spheres produced.
 spline(listOfXYTuple: Iterable[Union[Tuple[float, float], Tuple[float, float, float], Vector]], tangents: Optional[Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]]] = None, periodic: bool = False, parameters: Optional[Sequence[float]] = None, scale: bool = True, tol: Optional[float] = None, forConstruction: bool = False, includeCurrent: bool = False, makeWire: bool = False) T [source]
Create a spline interpolated through the provided points (2D or 3D).
 Parameters
self (T) –
listOfXYTuple (Iterable[Union[Tuple[float, float], Tuple[float, float, float], Vector]]) – points to interpolate through
tangents (Optional[Sequence[Union[Tuple[float, float], Tuple[float, float, float], Vector]]]) –
vectors specifying the direction of the tangent to the curve at each of the specified interpolation points.
If only 2 tangents are given, they will be used as the initial and final tangent.
If some tangents are not specified (i.e., are None), no tangent constraint will be applied to the corresponding interpolation point.
The spline will be C2 continuous at the interpolation points where no tangent constraint is specified, and C1 continuous at the points where a tangent constraint is specified.
periodic (bool) – creation of periodic curves
parameters (Optional[Sequence[float]]) –
the value of the parameter at each interpolation point. (The interpolated curve is represented as a vectorvalued function of a scalar parameter.)
If periodic == True, then len(parameters) must be len(interpolation points) + 1, otherwise len(parameters) must be equal to len(interpolation points).
scale (bool) –
whether to scale the specified tangent vectors before interpolating.
Each tangent is scaled, so it’s length is equal to the derivative of the Lagrange interpolated curve.
I.e., set this to True, if you want to use only the direction of the tangent vectors specified by
tangents
, but not their magnitude.tol (Optional[float]) –
tolerance of the algorithm (consult OCC documentation)
Used to check that the specified points are not too close to each other, and that tangent vectors are not too short. (In either case interpolation may fail.)
Set to None to use the default tolerance.
includeCurrent (bool) – use current point as a starting point of the curve
makeWire (bool) – convert the resulting spline edge to a wire
forConstruction (bool) –
 Returns
a Workplane object with the current point at the end of the spline
 Return type
T
The spline will begin at the current point, and end with the last point in the XY tuple list
This example creates a block with a spline for one side:
s = Workplane(Plane.XY()) sPnts = [ (2.75,1.5), (2.5,1.75), (2.0,1.5), (1.5,1.0), (1.0,1.25), (0.5,1.0), (0,1.0) ] r = s.lineTo(3.0,0).lineTo(3.0,1.0).spline(sPnts).close() r = r.extrude(0.5)
WARNING It is fairly easy to create a list of points that cannot be correctly interpreted as a spline.
 splineApprox(points: Iterable[Union[Tuple[float, float], Tuple[float, float, float], Vector]], tol: Optional[float] = 1e06, minDeg: int = 1, maxDeg: int = 6, smoothing: Optional[Tuple[float, float, float]] = (1, 1, 1), forConstruction: bool = False, includeCurrent: bool = False, makeWire: bool = False) T [source]
Create a spline interpolated through the provided points (2D or 3D).
 Parameters
self (T) –
points (Iterable[Union[Tuple[float, float], Tuple[float, float, float], Vector]]) – points to interpolate through
tol (Optional[float]) – tolerance of the algorithm (default: 1e6)
minDeg (int) – minimum spline degree (default: 1)
maxDeg (int) – maximum spline degree (default: 6)
smoothing (Optional[Tuple[float, float, float]]) – optional parameters for the variational smoothing algorithm (default: (1,1,1))
includeCurrent (bool) – use current point as a starting point of the curve
makeWire (bool) – convert the resulting spline edge to a wire
forConstruction (bool) –
 Returns
a Workplane object with the current point at the end of the spline
 Return type
T
WARNING for advanced users.
 split(keepTop: bool = False, keepBottom: bool = False) T [source]
 split(splitter: Union[T, Shape]) T
Splits a solid on the stack into two parts, optionally keeping the separate parts.
 Parameters
self –
keepTop (boolean) – True to keep the top, False or None to discard it
keepBottom (boolean) – True to keep the bottom, False or None to discard it
 Raises
ValueError – if keepTop and keepBottom are both false.
ValueError – if there is no solid in the current stack or parent chain
 Returns
CQ object with the desired objects on the stack.
The most common operation splits a solid and keeps one half. This sample creates split bushing:
# drill a hole in the side c = Workplane().box(1,1,1).faces(">Z").workplane().circle(0.25).cutThruAll() # now cut it in half sideways c = c.faces(">Y").workplane(0.5).split(keepTop=True)
 sweep(path: Union[Workplane, Wire, Edge], multisection: bool = False, sweepAlongWires: Optional[bool] = None, makeSolid: bool = True, isFrenet: bool = False, combine: Union[bool, Literal['cut', 'a', 's']] = True, clean: bool = True, transition: Literal['right', 'round', 'transformed'] = 'right', normal: Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]] = None, auxSpine: Optional[Workplane] = None) T [source]
Use all unextruded wires in the parent chain to create a swept solid.
 Parameters
self (T) –
path (Union[Workplane, Wire, Edge]) – A wire along which the pending wires will be swept
multiSection (boolean) – False to create multiple swept from wires on the chain along path. True to create only one solid swept along path with shape following the list of wires on the chain
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shapetransition (Literal['right', 'round', 'transformed']) – handling of profile orientation at C1 path discontinuities. Possible values are {‘transformed’,’round’, ‘right’} (default: ‘right’).
normal (Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]]) – optional fixed normal for extrusion
auxSpine (Optional[Workplane]) – a wire defining the binormal along the extrusion path
multisection (bool) –
sweepAlongWires (Optional[bool]) –
makeSolid (bool) –
isFrenet (bool) –
 Returns
a CQ object with the resulting solid selected.
 Return type
T
 tag(name: str) T [source]
Tags the current CQ object for later reference.
 Parameters
self (T) –
name (string) – the name to tag this object with
 Returns
self, a cq object with tag applied
 Return type
T
 tangentArcPoint(endpoint: Union[Tuple[float, float], Tuple[float, float, float], Vector], forConstruction: bool = False, relative: bool = True) T [source]
Draw an arc as a tangent from the end of the current edge to endpoint.
 Parameters
self (T) –
endpoint (2tuple, 3tuple or Vector) – point for the arc to end at
relative (Bool) – True if endpoint is specified relative to the current point, False if endpoint is in workplane coordinates
forConstruction (bool) –
 Returns
a Workplane object with an arc on the stack
 Return type
T
Requires the the current first object on the stack is an Edge, as would be the case after a lineTo operation or similar.
 text(txt: str, fontsize: float, distance: float, cut: bool = True, combine: Union[bool, Literal['cut', 'a', 's']] = False, clean: bool = True, font: str = 'Arial', fontPath: Optional[str] = None, kind: Literal['regular', 'bold', 'italic'] = 'regular', halign: Literal['center', 'left', 'right'] = 'center', valign: Literal['center', 'top', 'bottom'] = 'center') T [source]
Returns a 3D text.
 Parameters
self (T) –
txt (str) – text to be rendered
fontsize (float) – size of the font in model units
distance (float, negative means opposite the normal direction) – the distance to extrude or cut, normal to the workplane plane
cut (bool) – True to cut the resulting solid from the parent solids if found
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (bool) – call
clean()
afterwards to have a clean shapefont (str) – font name
fontPath (Optional[str]) – path to font file
kind (Literal['regular', 'bold', 'italic']) – font type
halign (Literal['center', 'left', 'right']) – horizontal alignment
valign (Literal['center', 'top', 'bottom']) – vertical alignment
 Returns
a CQ object with the resulting solid selected
 Return type
T
The returned object is always a Workplane object, and depends on whether combine is True, and whether a context solid is already defined:
if combine is False, the new value is pushed onto the stack.
if combine is true, the value is combined with the context solid if it exists, and the resulting solid becomes the new context solid.
Examples:
cq.Workplane().text("CadQuery", 5, 1)
Specify the font (name), and kind to use an installed system font:
cq.Workplane().text("CadQuery", 5, 1, font="Liberation Sans Narrow", kind="italic")
Specify fontPath to use a font from a given file:
cq.Workplane().text("CadQuery", 5, 1, fontPath="/opt/fonts/texgyrecursorbold.otf")
Cutting text into a solid:
cq.Workplane().box(8, 8, 8).faces(">Z").workplane().text("Z", 5, 1.0)
 threePointArc(point1: Union[Tuple[float, float], Tuple[float, float, float], Vector], point2: Union[Tuple[float, float], Tuple[float, float, float], Vector], forConstruction: bool = False) T [source]
Draw an arc from the current point, through point1, and ending at point2
 Parameters
self (T) –
point1 (2tuple, in workplane coordinates) – point to draw through
point2 (2tuple, in workplane coordinates) – end point for the arc
forConstruction (bool) –
 Returns
a workplane with the current point at the end of the arc
 Return type
T
 Future Enhancements:
provide a version that allows an arc using relative measures provide a centerpoint arc provide tangent arcs
 toOCC() Any [source]
Directly returns the wrapped OCCT object. :return: The wrapped OCCT object :rtype TopoDS_Shape or a subclass
 Return type
Any
 toPending() T [source]
Adds wires/edges to pendingWires/pendingEdges.
 Returns
same CQ object with updated context.
 Parameters
self (T) –
 Return type
T
 toSvg(opts: Optional[Any] = None) str [source]
Returns svg text that represents the first item on the stack.
for testing purposes.
 Parameters
opts (dictionary, width and height) – svg formatting options
 Returns
a string that contains SVG that represents this item.
 Return type
str
 transformed(rotate: Union[Tuple[float, float], Tuple[float, float, float], Vector] = (0, 0, 0), offset: Union[Tuple[float, float], Tuple[float, float, float], Vector] = (0, 0, 0)) T [source]
Create a new workplane based on the current one. The origin of the new plane is located at the existing origin+offset vector, where offset is given in coordinates local to the current plane The new plane is rotated through the angles specified by the components of the rotation vector. :param self: :param rotate: 3tuple of angles to rotate, in degrees relative to work plane coordinates :param offset: 3tuple to offset the new plane, in local work plane coordinates :return: a new work plane, transformed as requested
 translate(vec: Union[Tuple[float, float], Tuple[float, float, float], Vector]) T [source]
Returns a copy of all of the items on the stack moved by the specified translation vector.
 Parameters
self (T) –
tupleDistance (a 3tuple of float) – distance to move, in global coordinates
vec (Union[Tuple[float, float], Tuple[float, float, float], Vector]) –
 Returns
a CQ object
 Return type
T
 twistExtrude(distance: float, angleDegrees: float, combine: Union[bool, Literal['cut', 'a', 's']] = True, clean: bool = True) T [source]
Extrudes a wire in the direction normal to the plane, but also twists by the specified angle over the length of the extrusion.
The center point of the rotation will be the center of the workplane.
See extrude for more details, since this method is the same except for the the addition of the angle. In fact, if angle=0, the result is the same as a linear extrude.
NOTE This method can create complex calculations, so be careful using it with complex geometries
 Parameters
self (T) –
distance (float) – the distance to extrude normal to the workplane
angle – angle (in degrees) to rotate through the extrusion
combine (Union[bool, Literal['cut', 'a', 's']]) – True or “a” to combine the resulting solid with parent solids if found, “cut” or “s” to remove the resulting solid from the parent solids if found. False to keep the resulting solid separated from the parent solids.
clean (boolean) – call
clean()
afterwards to have a clean shapeangleDegrees (float) –
 Returns
a CQ object with the resulting solid selected.
 Return type
T
 union(toUnion: Optional[Union[Workplane, Solid, Compound]] = None, clean: bool = True, glue: bool = False, tol: Optional[float] = None) T [source]
Unions all of the items on the stack of toUnion with the current solid. If there is no current solid, the items in toUnion are unioned together.
 Parameters
self (T) –
toUnion (a solid object, or a Workplane object having a solid,) –
clean (bool) – call
clean()
afterwards to have a clean shape (default True)glue (bool) – use a faster gluing mode for nonoverlapping shapes (default False)
tol (Optional[float]) – tolerance value for fuzzy bool operation mode (default None)
 Raises
ValueError if there is no solid to add to in the chain
 Returns
a Workplane object with the resulting object selected
 Return type
T
 vLine(distance: float, forConstruction: bool = False) T [source]
Make a vertical line from the current point the provided distance
 Parameters
self (T) –
distance (float) –
distance from current point
forConstruction (bool) –
 Returns
the workplane object with the current point at the end of the new line
 Return type
T
 vLineTo(yCoord: float, forConstruction: bool = False) T [source]
Make a vertical line from the current point to the provided y coordinate.
Useful if it is more convenient to specify the end location rather than distance, as in
vLine()
 Parameters
self (T) –
yCoord (float) – y coordinate for the end of the line
forConstruction (bool) –
 Returns
the Workplane object with the current point at the end of the new line
 Return type
T
 val() Union[Vector, Location, Shape, Sketch] [source]
Return the first value on the stack. If no value is present, current plane origin is returned.
 Returns
the first value on the stack.
 Return type
A CAD primitive
 vals() List[Union[Vector, Location, Shape, Sketch]] [source]
get the values in the current list
 Return type
list of occ_impl objects
 Returns
the values of the objects on the stack.
Contrast with
all()
, which returns CQ objects for all of the items on the stack
 vertices(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select the vertices of objects on the stack, optionally filtering the selection. If there are multiple objects on the stack, the vertices of all objects are collected and a list of all the distinct vertices is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) –
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains the distinct vertices of all objects on the current stack, after being filtered by the selector, if provided
 Return type
T
If there are no vertices for any objects on the current stack, an empty CQ object is returned
The typical use is to select the vertices of a single object on the stack. For example:
Workplane().box(1,1,1).faces("+Z").vertices().size()
returns 4, because the topmost face of cube will contain four vertices. While this:
Workplane().box(1,1,1).faces().vertices().size()
returns 8, because a cube has a total of 8 vertices
Note Circles are peculiar, they have a single vertex at the center!
 wedge(dx: float, dy: float, dz: float, xmin: float, zmin: float, xmax: float, zmax: float, pnt: ~typing.Union[~typing.Tuple[float, float], ~typing.Tuple[float, float, float], ~cadquery.occ_impl.geom.Vector] = Vector: (0.0, 0.0, 0.0), dir: ~typing.Union[~typing.Tuple[float, float], ~typing.Tuple[float, float, float], ~cadquery.occ_impl.geom.Vector] = Vector: (0.0, 0.0, 1.0), centered: ~typing.Union[bool, ~typing.Tuple[bool, bool, bool]] = True, combine: bool = True, clean: bool = True) T [source]
Returns a 3D wedge with the specified dimensions for each point on the stack.
 Parameters
self (T) –
dx (float) – Distance along the X axis
dy (float) – Distance along the Y axis
dz (float) – Distance along the Z axis
xmin (float) – The minimum X location
zmin (float) – The minimum Z location
xmax (float) – The maximum X location
zmax (float) – The maximum Z location
pnt (Union[Tuple[float, float], Tuple[float, float, float], Vector]) – A vector (or tuple) for the origin of the direction for the wedge
dir (Union[Tuple[float, float], Tuple[float, float, float], Vector]) – The direction vector (or tuple) for the major axis of the wedge
centered (Union[bool, Tuple[bool, bool, bool]]) – If True, the wedge will be centered around the reference point. If False, the corner of the wedge will be on the reference point and it will extend in the positive x, y and z directions. Can also use a 3tuple to specify centering along each axis.
combine (bool) – Whether the results should be combined with other solids on the stack (and each other)
clean (bool) – True to attempt to have the kernel clean up the geometry, False otherwise
 Returns
A wedge object for each point on the stack
 Return type
T
One wedge is created for each item on the current stack. If no items are on the stack, one wedge using the current workplane center is created.
If combine is True, the result will be a single object on the stack. If a solid was found in the chain, the result is that solid with all wedges produced fused onto it otherwise, the result is the combination of all the produced wedges.
If combine is False, the result will be a list of the wedges produced.
 wire(forConstruction: bool = False) T [source]
Returns a CQ object with all pending edges connected into a wire.
All edges on the stack that can be combined will be combined into a single wire object, and other objects will remain on the stack unmodified. If there are no pending edges, this method will just return self.
 Parameters
self (T) –
forConstruction (bool) – whether the wire should be used to make a solid, or if it is just for reference
 Return type
T
This method is primarily of use to plugin developers making utilities for 2D construction. This method should be called when a user operation implies that 2D construction is finished, and we are ready to begin working in 3d.
SEE ‘2D construction concepts’ for a more detailed explanation of how CadQuery handles edges, wires, etc.
Any non edges will still remain.
 wires(selector: Optional[Union[str, Selector]] = None, tag: Optional[str] = None) T [source]
Select the wires of objects on the stack, optionally filtering the selection. If there are multiple objects on the stack, the wires of all objects are collected and a list of all the distinct wires is returned.
 Parameters
self (T) –
selector (None, a Selector object, or a string selector expression.) – A selector
tag (string) – if set, search the tagged CQ object instead of self
 Returns
a CQ object who’s stack contains all of the distinct wires of all objects on the current stack, filtered by the provided selector.
 Return type
T
If there are no wires for any objects on the current stack, an empty CQ object is returned
The typical use is to select the wires of a single object on the stack. For example:
CQ(aCube).faces("+Z").wires().size()
returns 1, because a face typically only has one outer wire
 workplane(offset: float = 0.0, invert: bool = False, centerOption: Literal['CenterOfMass', 'ProjectedOrigin', 'CenterOfBoundBox'] = 'ProjectedOrigin', origin: Optional[Union[Tuple[float, float], Tuple[float, float, float], Vector]] = None) T [source]
Creates a new 2D workplane, located relative to the first face on the stack.
 Parameters
self (T) –
offset (float or None=0.0) – offset for the workplane in its normal direction . Default
invert (boolean or None=False) – invert the normal direction from that of the face.
centerOption (string or None='ProjectedOrigin') – how local origin of workplane is determined.
origin (Vector or None) – origin for plane center, requires ‘ProjectedOrigin’ centerOption.
 Return type
Workplane object
The first element on the stack must be a face, a set of coplanar faces or a vertex. If a vertex, then the parent item on the chain immediately before the vertex must be a face.
The result will be a 2D working plane with a new coordinate system set up as follows:
The centerOption parameter sets how the center is defined. Options are ‘CenterOfMass’, ‘CenterOfBoundBox’, or ‘ProjectedOrigin’. ‘CenterOfMass’ and ‘CenterOfBoundBox’ are in relation to the selected face(s) or vertex (vertices). ‘ProjectedOrigin’ uses by default the current origin or the optional origin parameter (if specified) and projects it onto the plane defined by the selected face(s).
The Z direction will be the normal of the face, computed at the center point.
The X direction will be parallel to the xy plane. If the workplane is parallel to the global xy plane, the x direction of the workplane will coincide with the global x direction.
Most commonly, the selected face will be planar, and the workplane lies in the same plane of the face ( IE, offset=0). Occasionally, it is useful to define a face offset from an existing surface, and even more rarely to define a workplane based on a face that is not planar.
 cadquery.sortWiresByBuildOrder(wireList: List[Wire]) List[List[Wire]] [source]
Tries to determine how wires should be combined into faces.
 Assume:
The wires make up one or more faces, which could have ‘holes’ Outer wires are listed ahead of inner wires there are no wires inside wires inside wires ( IE, islands – we can deal with that later on ) none of the wires are construction wires
 Compute:
one or more sets of wires, with the outer wire listed first, and inner ones
Returns, list of lists.
 class cadquery.occ_impl.shapes.Mixin1D[source]
Bases:
object
 endPoint() Vector [source]
 Returns
a vector representing the end point of this edge.
 Parameters
self (Mixin1DProtocol) –
 Return type
Note, circles may have the start and end points the same
 locationAt(d: float, mode: Literal['length', 'parameter'] = 'length', frame: Literal['frenet', 'corrected'] = 'frenet', planar: bool = False) Location [source]
Generate a location along the underlying curve. :param self: :param d: distance or parameter value :param mode: position calculation mode (default: length) :param frame: moving frame calculation method (default: frenet) :param planar: planar mode :return: A Location object representing local coordinate system at the specified distance.
 Parameters
self (Mixin1DProtocol) –
d (float) –
mode (Literal['length', 'parameter']) –
frame (Literal['frenet', 'corrected']) –
planar (bool) –
 Return type
 locations(ds: Iterable[float], mode: Literal['length', 'parameter'] = 'length', frame: Literal['frenet', 'corrected'] = 'frenet', planar: bool = False) List[Location] [source]
Generate location along the curve :param self: :param ds: distance or parameter values :param mode: position calculation mode (default: length) :param frame: moving frame calculation method (default: frenet) :param planar: planar mode :return: A list of Location objects representing local coordinate systems at the specified distances.
 Parameters
self (Mixin1DProtocol) –
ds (Iterable[float]) –
mode (Literal['length', 'parameter']) –
frame (Literal['frenet', 'corrected']) –
planar (bool) –
 Return type
List[Location]
 normal() Vector [source]
Calculate the normal Vector. Only possible for planar curves.
 Returns
normal vector
 Parameters
self (Mixin1DProtocol) –
 Return type
 paramAt(d: float) float [source]
Compute parameter value at the specified normalized distance.
 Parameters
self (Mixin1DProtocol) –
d (float) – normalized distance [0, 1]
 Returns
parameter value
 Return type
float
 positionAt(d: float, mode: Literal['length', 'parameter'] = 'length') Vector [source]
Generate a position along the underlying curve. :param self: :param d: distance or parameter value :param mode: position calculation mode (default: length) :return: A Vector on the underlying curve located at the specified d value.
 Parameters
self (Mixin1DProtocol) –
d (float) –
mode (Literal['length', 'parameter']) –
 Return type
 positions(ds: Iterable[float], mode: Literal['length', 'parameter'] = 'length') List[Vector] [source]
Generate positions along the underlying curve :param self: :param ds: distance or parameter values :param mode: position calculation mode (default: length) :return: A list of Vector objects.
 Parameters
self (Mixin1DProtocol) –
ds (Iterable[float]) –
mode (Literal['length', 'parameter']) –
 Return type
List[Vector]
 radius() float [source]
Calculate the radius.
Note that when applied to a Wire, the radius is simply the radius of the first edge.
 Returns
radius
 Raises
ValueError – if kernel can not reduce the shape to a circular edge
 Parameters
self (Mixin1DProtocol) –
 Return type
float
 startPoint() Vector [source]
 Returns
a vector representing the start point of this edge
 Parameters
self (Mixin1DProtocol) –
 Return type
Note, circles may have the start and end points the same
 tangentAt(locationParam: float = 0.5, mode: Literal['length', 'parameter'] = 'length') Vector [source]
Compute tangent vector at the specified location.
 Parameters
self (Mixin1DProtocol) –
locationParam (float) – distance or parameter value (default: 0.5)
mode (Literal['length', 'parameter']) – position calculation mode (default: parameter)
 Returns
tangent vector
 Return type
 class cadquery.occ_impl.shapes.Mixin3D[source]
Bases:
object
 chamfer(length: float, length2: Optional[float], edgeList: Iterable[Edge]) Any [source]
Chamfers the specified edges of this solid. :param self: :param length: length > 0, the length (length) of the chamfer :param length2: length2 > 0, optional parameter for asymmetrical chamfer. Should be None if not required. :param edgeList: a list of Edge objects, which must belong to this solid :return: Chamfered solid
 Parameters
self (Any) –
length (float) –
length2 (Optional[float]) –
edgeList (Iterable[Edge]) –
 Return type
Any
 dprism(self: TS, basis: Optional[cadquery.occ_impl.shapes.Face], profiles: List[cadquery.occ_impl.shapes.Wire], depth: Union[float, int, NoneType] = None, taper: Union[float, int] = 0, upToFace: Optional[cadquery.occ_impl.shapes.Face] = None, thruAll: bool = True, additive: bool = True) 'Solid' [source]
Make a prismatic feature (additive or subtractive)
 Parameters
self (TS) –
basis (Optional[Face]) – face to perform the operation on
profiles (List[Wire]) – list of profiles
depth (Optional[Union[float, int]]) – depth of the cut or extrusion
upToFace (Optional[Face]) – a face to extrude until
thruAll (bool) – cut thruAll
taper (Union[float, int]) –
additive (bool) –
 Returns
a Solid object
 Return type
 fillet(radius: float, edgeList: Iterable[Edge]) Any [source]
Fillets the specified edges of this solid. :param self: :param radius: float > 0, the radius of the fillet :param edgeList: a list of Edge objects, which must belong to this solid :return: Filleted solid
 Parameters
self (Any) –
radius (float) –
edgeList (Iterable[Edge]) –
 Return type
Any
 isInside(point: Union[Vector, Tuple[float, float, float]], tolerance: float = 1e06) bool [source]
Returns whether or not the point is inside a solid or compound object within the specified tolerance.
 Parameters
self (ShapeProtocol) –
point (Union[Vector, Tuple[float, float, float]]) – tuple or Vector representing 3D point to be tested
tolerance (float) – tolerance for inside determination, default=1.0e6
 Returns
bool indicating whether or not point is within solid
 Return type
bool
 shell(faceList: Optional[Iterable[Face]], thickness: float, tolerance: float = 0.0001, kind: Literal['arc', 'intersection'] = 'arc') Any [source]
Make a shelled solid of self.
 Parameters
self (Any) –
faceList (Optional[Iterable[Face]]) – List of faces to be removed, which must be part of the solid. Can be an empty list.
thickness (float) – Floating point thickness. Positive shells outwards, negative shells inwards.
tolerance (float) – Modelling tolerance of the method, default=0.0001.
kind (Literal['arc', 'intersection']) –
 Returns
A shelled solid.
 Return type
Any
Copyright (C) 20112015 Parametric Products Intellectual Holdings, LLC
This file is part of CadQuery.
CadQuery is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
CadQuery is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; If not, see <http://www.gnu.org/licenses/>
 class cadquery.selectors.AndSelector(left, right)[source]
Bases:
BinarySelector
Intersection selector. Returns objects that is selected by both selectors.
 class cadquery.selectors.AreaNthSelector(n: int, directionMax: bool = True, tolerance: float = 0.0001)[source]
Bases:
_NthSelector
Selects the object(s) with Nth area
 Applicability:
Faces, Shells, Solids  Shape.Area() is used to compute area
closed planar Wires  a temporary face is created to compute area
Will ignore nonplanar or nonclosed wires.
Among other things can be used to select one of the nested coplanar wires or faces.
For example to create a fillet on a shank:
result = ( cq.Workplane("XY") .circle(5) .extrude(2) .circle(2) .extrude(10) .faces(">Z[2]") .wires(AreaNthSelector(0)) .fillet(2) )
Or to create a lip on a case seam:
result = ( cq.Workplane("XY") .rect(20, 20) .extrude(10) .edges("Z or <Z") .fillet(2) .faces(">Z") .shell(2) .faces(">Z") .wires(AreaNthSelector(1)) .toPending() .workplane() .offset2D(1) .extrude(1) .faces(">Z[2]") .wires(AreaNthSelector(0)) .toPending() .workplane() .cutBlind(2) )
 Parameters
n (int) –
directionMax (bool) –
tolerance (float) –
 class cadquery.selectors.BaseDirSelector(vector: Vector, tolerance: float = 0.0001)[source]
Bases:
Selector
A selector that handles selection on the basis of a single direction vector.
 Parameters
vector (Vector) –
tolerance (float) –
 class cadquery.selectors.BinarySelector(left, right)[source]
Bases:
Selector
Base class for selectors that operates with two other selectors. Subclass must implement the :filterResults(): method.
 class cadquery.selectors.BoxSelector(point0, point1, boundingbox=False)[source]
Bases:
Selector
Selects objects inside the 3D box defined by 2 points.
If boundingbox is True only the objects that have their bounding box inside the given box is selected. Otherwise only center point of the object is tested.
Applicability: all types of shapes
Example:
CQ(aCube).edges(BoxSelector((0,1,0), (1,2,1))
 class cadquery.selectors.CenterNthSelector(vector: Vector, n: int, directionMax: bool = True, tolerance: float = 0.0001)[source]
Bases:
_NthSelector
Sorts objects into a list with order determined by the distance of their center projected onto the specified direction.
 Applicability:
All Shapes.
 Parameters
vector (Vector) –
n (int) –
directionMax (bool) –
tolerance (float) –
 class cadquery.selectors.DirectionMinMaxSelector(vector: Vector, directionMax: bool = True, tolerance: float = 0.0001)[source]
Bases:
CenterNthSelector
Selects objects closest or farthest in the specified direction.
 Applicability:
All object types. for a vertex, its point is used. for all other kinds of objects, the center of mass of the object is used.
You can use the string shortcuts >(XYZ) or <(XYZ) if you want to select based on a cardinal direction.
For example this:
CQ(aCube).faces(DirectionMinMaxSelector((0, 0, 1), True)
Means to select the face having the center of mass farthest in the positive z direction, and is the same as:
CQ(aCube).faces(">Z")
 Parameters
vector (Vector) –
directionMax (bool) –
tolerance (float) –
 class cadquery.selectors.DirectionNthSelector(vector: Vector, n: int, directionMax: bool = True, tolerance: float = 0.0001)[source]
Bases:
ParallelDirSelector
,CenterNthSelector
Filters for objects parallel (or normal) to the specified direction then returns the Nth one.
 Applicability:
Linear Edges Planar Faces
 Parameters
vector (Vector) –
n (int) –
directionMax (bool) –
tolerance (float) –
 class cadquery.selectors.DirectionSelector(vector: Vector, tolerance: float = 0.0001)[source]
Bases:
BaseDirSelector
Selects objects aligned with the provided direction.
 Applicability:
Linear Edges Planar Faces
Use the string syntax shortcut +/(XYZ) if you want to select based on a cardinal direction.
Example:
CQ(aCube).faces(DirectionSelector((0, 0, 1))
selects faces with the normal in the z direction, and is equivalent to:
CQ(aCube).faces("+Z")
 Parameters
vector (Vector) –
tolerance (float) –
 class cadquery.selectors.InverseSelector(selector)[source]
Bases:
Selector
Inverts the selection of given selector. In other words, selects all objects that is not selected by given selector.
 class cadquery.selectors.LengthNthSelector(n: int, directionMax: bool = True, tolerance: float = 0.0001)[source]
Bases:
_NthSelector
Select the object(s) with the Nth length
 Applicability:
All Edge and Wire objects
 Parameters
n (int) –
directionMax (bool) –
tolerance (float) –
 class cadquery.selectors.NearestToPointSelector(pnt)[source]
Bases:
Selector
Selects object nearest the provided point.
If the object is a vertex or point, the distance is used. For other kinds of shapes, the center of mass is used to to compute which is closest.
Applicability: All Types of Shapes
Example:
CQ(aCube).vertices(NearestToPointSelector((0,1,0))
returns the vertex of the unit cube closest to the point x=0,y=1,z=0
 class cadquery.selectors.ParallelDirSelector