diff --git a/docs/assets/align.svg b/docs/assets/align.svg
new file mode 100644
index 0000000..4ae14c7
--- /dev/null
+++ b/docs/assets/align.svg
@@ -0,0 +1,1558 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/box_example.svg b/docs/assets/box_example.svg
new file mode 100644
index 0000000..3fe8863
--- /dev/null
+++ b/docs/assets/box_example.svg
@@ -0,0 +1,32 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/circle_example.svg b/docs/assets/circle_example.svg
new file mode 100644
index 0000000..e7fc3fc
--- /dev/null
+++ b/docs/assets/circle_example.svg
@@ -0,0 +1,21 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/cone_example.svg b/docs/assets/cone_example.svg
new file mode 100644
index 0000000..05f061b
--- /dev/null
+++ b/docs/assets/cone_example.svg
@@ -0,0 +1,28 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/counter_bore_hole_example.svg b/docs/assets/counter_bore_hole_example.svg
new file mode 100644
index 0000000..4cce26d
--- /dev/null
+++ b/docs/assets/counter_bore_hole_example.svg
@@ -0,0 +1,48 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/counter_sink_hole_example.svg b/docs/assets/counter_sink_hole_example.svg
new file mode 100644
index 0000000..20da702
--- /dev/null
+++ b/docs/assets/counter_sink_hole_example.svg
@@ -0,0 +1,47 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/cylinder_example.svg b/docs/assets/cylinder_example.svg
new file mode 100644
index 0000000..2a23784
--- /dev/null
+++ b/docs/assets/cylinder_example.svg
@@ -0,0 +1,28 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/ellipse_example.svg b/docs/assets/ellipse_example.svg
new file mode 100644
index 0000000..a904057
--- /dev/null
+++ b/docs/assets/ellipse_example.svg
@@ -0,0 +1,21 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex10_algebra.svg b/docs/assets/general_ex10_algebra.svg
new file mode 100644
index 0000000..a52cb0b
--- /dev/null
+++ b/docs/assets/general_ex10_algebra.svg
@@ -0,0 +1,67 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex11_algebra.svg b/docs/assets/general_ex11_algebra.svg
new file mode 100644
index 0000000..f8a0325
--- /dev/null
+++ b/docs/assets/general_ex11_algebra.svg
@@ -0,0 +1,135 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex12_algebra.svg b/docs/assets/general_ex12_algebra.svg
new file mode 100644
index 0000000..9a91fb0
--- /dev/null
+++ b/docs/assets/general_ex12_algebra.svg
@@ -0,0 +1,39 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex13_algebra.svg b/docs/assets/general_ex13_algebra.svg
new file mode 100644
index 0000000..ca06ec7
--- /dev/null
+++ b/docs/assets/general_ex13_algebra.svg
@@ -0,0 +1,168 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex14_algebra.svg b/docs/assets/general_ex14_algebra.svg
new file mode 100644
index 0000000..7fddd67
--- /dev/null
+++ b/docs/assets/general_ex14_algebra.svg
@@ -0,0 +1,57 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex15_algebra.svg b/docs/assets/general_ex15_algebra.svg
new file mode 100644
index 0000000..0d9d0ef
--- /dev/null
+++ b/docs/assets/general_ex15_algebra.svg
@@ -0,0 +1,45 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex16_algebra.svg b/docs/assets/general_ex16_algebra.svg
new file mode 100644
index 0000000..d9f4e9b
--- /dev/null
+++ b/docs/assets/general_ex16_algebra.svg
@@ -0,0 +1,326 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex17_algebra.svg b/docs/assets/general_ex17_algebra.svg
new file mode 100644
index 0000000..16b891f
--- /dev/null
+++ b/docs/assets/general_ex17_algebra.svg
@@ -0,0 +1,44 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex18_algebra.svg b/docs/assets/general_ex18_algebra.svg
new file mode 100644
index 0000000..e17f67a
--- /dev/null
+++ b/docs/assets/general_ex18_algebra.svg
@@ -0,0 +1,69 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex19_algebra.svg b/docs/assets/general_ex19_algebra.svg
new file mode 100644
index 0000000..ac45d45
--- /dev/null
+++ b/docs/assets/general_ex19_algebra.svg
@@ -0,0 +1,51 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex1_algebra.svg b/docs/assets/general_ex1_algebra.svg
new file mode 100644
index 0000000..e4e9f9d
--- /dev/null
+++ b/docs/assets/general_ex1_algebra.svg
@@ -0,0 +1,32 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex20_algebra.svg b/docs/assets/general_ex20_algebra.svg
new file mode 100644
index 0000000..67848c5
--- /dev/null
+++ b/docs/assets/general_ex20_algebra.svg
@@ -0,0 +1,40 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex21_algebra.svg b/docs/assets/general_ex21_algebra.svg
new file mode 100644
index 0000000..2ef0f88
--- /dev/null
+++ b/docs/assets/general_ex21_algebra.svg
@@ -0,0 +1,43 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex22_algebra.svg b/docs/assets/general_ex22_algebra.svg
new file mode 100644
index 0000000..12cac20
--- /dev/null
+++ b/docs/assets/general_ex22_algebra.svg
@@ -0,0 +1,88 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex23_algebra.svg b/docs/assets/general_ex23_algebra.svg
new file mode 100644
index 0000000..b32a0d0
--- /dev/null
+++ b/docs/assets/general_ex23_algebra.svg
@@ -0,0 +1,59 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex24_algebra.svg b/docs/assets/general_ex24_algebra.svg
new file mode 100644
index 0000000..d9e6104
--- /dev/null
+++ b/docs/assets/general_ex24_algebra.svg
@@ -0,0 +1,54 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex25_algebra.svg b/docs/assets/general_ex25_algebra.svg
new file mode 100644
index 0000000..fcd860c
--- /dev/null
+++ b/docs/assets/general_ex25_algebra.svg
@@ -0,0 +1,84 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex26_algebra.svg b/docs/assets/general_ex26_algebra.svg
new file mode 100644
index 0000000..974f035
--- /dev/null
+++ b/docs/assets/general_ex26_algebra.svg
@@ -0,0 +1,46 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex27_algebra.svg b/docs/assets/general_ex27_algebra.svg
new file mode 100644
index 0000000..2869238
--- /dev/null
+++ b/docs/assets/general_ex27_algebra.svg
@@ -0,0 +1,42 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex28_algebra.svg b/docs/assets/general_ex28_algebra.svg
new file mode 100644
index 0000000..21c6da0
--- /dev/null
+++ b/docs/assets/general_ex28_algebra.svg
@@ -0,0 +1,76 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex29_algebra.svg b/docs/assets/general_ex29_algebra.svg
new file mode 100644
index 0000000..48f1aa5
--- /dev/null
+++ b/docs/assets/general_ex29_algebra.svg
@@ -0,0 +1,63 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex2_algebra.svg b/docs/assets/general_ex2_algebra.svg
new file mode 100644
index 0000000..ee03603
--- /dev/null
+++ b/docs/assets/general_ex2_algebra.svg
@@ -0,0 +1,42 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex30_algebra.svg b/docs/assets/general_ex30_algebra.svg
new file mode 100644
index 0000000..3a09f98
--- /dev/null
+++ b/docs/assets/general_ex30_algebra.svg
@@ -0,0 +1,51 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex31_algebra.svg b/docs/assets/general_ex31_algebra.svg
new file mode 100644
index 0000000..f59ce08
--- /dev/null
+++ b/docs/assets/general_ex31_algebra.svg
@@ -0,0 +1,356 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex32_algebra.svg b/docs/assets/general_ex32_algebra.svg
new file mode 100644
index 0000000..59c79d3
--- /dev/null
+++ b/docs/assets/general_ex32_algebra.svg
@@ -0,0 +1,119 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex33_algebra.svg b/docs/assets/general_ex33_algebra.svg
new file mode 100644
index 0000000..e9507ed
--- /dev/null
+++ b/docs/assets/general_ex33_algebra.svg
@@ -0,0 +1,92 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex34_algebra.svg b/docs/assets/general_ex34_algebra.svg
new file mode 100644
index 0000000..404557b
--- /dev/null
+++ b/docs/assets/general_ex34_algebra.svg
@@ -0,0 +1,449 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex35_algebra.svg b/docs/assets/general_ex35_algebra.svg
new file mode 100644
index 0000000..4e73722
--- /dev/null
+++ b/docs/assets/general_ex35_algebra.svg
@@ -0,0 +1,98 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex36_algebra.svg b/docs/assets/general_ex36_algebra.svg
new file mode 100644
index 0000000..ac4e205
--- /dev/null
+++ b/docs/assets/general_ex36_algebra.svg
@@ -0,0 +1,46 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex3_algebra.svg b/docs/assets/general_ex3_algebra.svg
new file mode 100644
index 0000000..a4a9f42
--- /dev/null
+++ b/docs/assets/general_ex3_algebra.svg
@@ -0,0 +1,41 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex4_algebra.svg b/docs/assets/general_ex4_algebra.svg
new file mode 100644
index 0000000..21a11de
--- /dev/null
+++ b/docs/assets/general_ex4_algebra.svg
@@ -0,0 +1,35 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex5_algebra.svg b/docs/assets/general_ex5_algebra.svg
new file mode 100644
index 0000000..88c336a
--- /dev/null
+++ b/docs/assets/general_ex5_algebra.svg
@@ -0,0 +1,49 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex6_algebra.svg b/docs/assets/general_ex6_algebra.svg
new file mode 100644
index 0000000..5910ee1
--- /dev/null
+++ b/docs/assets/general_ex6_algebra.svg
@@ -0,0 +1,60 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex7_algebra.svg b/docs/assets/general_ex7_algebra.svg
new file mode 100644
index 0000000..c1b67af
--- /dev/null
+++ b/docs/assets/general_ex7_algebra.svg
@@ -0,0 +1,72 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex8_algebra.svg b/docs/assets/general_ex8_algebra.svg
new file mode 100644
index 0000000..7fdcaf0
--- /dev/null
+++ b/docs/assets/general_ex8_algebra.svg
@@ -0,0 +1,58 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/general_ex9_algebra.svg b/docs/assets/general_ex9_algebra.svg
new file mode 100644
index 0000000..8f271fd
--- /dev/null
+++ b/docs/assets/general_ex9_algebra.svg
@@ -0,0 +1,56 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/hole_example.svg b/docs/assets/hole_example.svg
new file mode 100644
index 0000000..640a871
--- /dev/null
+++ b/docs/assets/hole_example.svg
@@ -0,0 +1,40 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/polygon_example.svg b/docs/assets/polygon_example.svg
new file mode 100644
index 0000000..79e66cb
--- /dev/null
+++ b/docs/assets/polygon_example.svg
@@ -0,0 +1,30 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/rectangle_example.svg b/docs/assets/rectangle_example.svg
new file mode 100644
index 0000000..5a3e4b0
--- /dev/null
+++ b/docs/assets/rectangle_example.svg
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/rectangle_rounded_example.svg b/docs/assets/rectangle_rounded_example.svg
new file mode 100644
index 0000000..ffd76fa
--- /dev/null
+++ b/docs/assets/rectangle_rounded_example.svg
@@ -0,0 +1,28 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/regular_polygon_example.svg b/docs/assets/regular_polygon_example.svg
new file mode 100644
index 0000000..e44762b
--- /dev/null
+++ b/docs/assets/regular_polygon_example.svg
@@ -0,0 +1,26 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/slot_arc_example.svg b/docs/assets/slot_arc_example.svg
new file mode 100644
index 0000000..3ade261
--- /dev/null
+++ b/docs/assets/slot_arc_example.svg
@@ -0,0 +1,28 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/slot_center_point_example.svg b/docs/assets/slot_center_point_example.svg
new file mode 100644
index 0000000..017033f
--- /dev/null
+++ b/docs/assets/slot_center_point_example.svg
@@ -0,0 +1,26 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/slot_center_to_center_example.svg b/docs/assets/slot_center_to_center_example.svg
new file mode 100644
index 0000000..75e7db0
--- /dev/null
+++ b/docs/assets/slot_center_to_center_example.svg
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/slot_overall_example.svg b/docs/assets/slot_overall_example.svg
new file mode 100644
index 0000000..2ced275
--- /dev/null
+++ b/docs/assets/slot_overall_example.svg
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/sphere_example.svg b/docs/assets/sphere_example.svg
new file mode 100644
index 0000000..35e7b74
--- /dev/null
+++ b/docs/assets/sphere_example.svg
@@ -0,0 +1,25 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/text_example.svg b/docs/assets/text_example.svg
new file mode 100644
index 0000000..a974906
--- /dev/null
+++ b/docs/assets/text_example.svg
@@ -0,0 +1,66 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/torus_example.svg b/docs/assets/torus_example.svg
new file mode 100644
index 0000000..9f79a83
--- /dev/null
+++ b/docs/assets/torus_example.svg
@@ -0,0 +1,30 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/trapezoid_example.svg b/docs/assets/trapezoid_example.svg
new file mode 100644
index 0000000..3cb21c5
--- /dev/null
+++ b/docs/assets/trapezoid_example.svg
@@ -0,0 +1,30 @@
+
+
+
\ No newline at end of file
diff --git a/docs/assets/wedge_example.svg b/docs/assets/wedge_example.svg
new file mode 100644
index 0000000..067e8ea
--- /dev/null
+++ b/docs/assets/wedge_example.svg
@@ -0,0 +1,32 @@
+
+
+
\ No newline at end of file
diff --git a/docs/build_line.rst b/docs/build_line.rst
index 65b132d..891d976 100644
--- a/docs/build_line.rst
+++ b/docs/build_line.rst
@@ -176,106 +176,6 @@ There are few things to note from this example:
``Sweep`` operation "consumes" these pending objects as to not interfere with
subsequence operations.
-*****************
-BuildLine Objects
-*****************
-
-The following objects all can be used in BuildLine contexts.
-
-.. grid:: 3
-
- .. grid-item-card:: :class:`~objects_curve.Bezier`
-
- .. image:: assets/bezier_curve_example.svg
-
- +++
- Curve defined by control points and weights
-
- .. grid-item-card:: :class:`~objects_curve.CenterArc`
-
- .. image:: assets/center_arc_example.svg
-
- +++
- Arc defined by center, radius, & angles
-
- .. grid-item-card:: :class:`~objects_curve.EllipticalCenterArc`
-
- .. image:: assets/elliptical_center_arc_example.svg
-
- +++
- Elliptical arc defined by center, radii & angles
-
- .. grid-item-card:: :class:`~objects_curve.Helix`
-
- .. image:: assets/helix_example.svg
-
- +++
- Helix defined pitch, radius and height
-
- .. grid-item-card:: :class:`~objects_curve.JernArc`
-
- .. image:: assets/jern_arc_example.svg
-
- +++
- Arc define by start point, tangent, radius and angle
-
- .. grid-item-card:: :class:`~objects_curve.Line`
-
- .. image:: assets/line_example.svg
-
- +++
- Line defined by end points
-
- .. grid-item-card:: :class:`~objects_curve.PolarLine`
-
- .. image:: assets/polar_line_example.svg
-
- +++
- Line defined by start, angle and length
-
- .. grid-item-card:: :class:`~objects_curve.Polyline`
-
- .. image:: assets/polyline_example.svg
-
- +++
- Multiple line segments defined by points
-
- .. grid-item-card:: :class:`~objects_curve.RadiusArc`
-
- .. image:: assets/radius_arc_example.svg
-
- +++
- Arc define by two points and a radius
-
- .. grid-item-card:: :class:`~objects_curve.SagittaArc`
-
- .. image:: assets/sagitta_arc_example.svg
-
- +++
- Arc define by two points and a sagitta
-
- .. grid-item-card:: :class:`~objects_curve.Spline`
-
- .. image:: assets/spline_example.svg
-
- +++
- Curve define by points
-
- .. grid-item-card:: :class:`~objects_curve.TangentArc`
-
- .. image:: assets/tangent_arc_example.svg
-
- +++
- Curve define by two points and a tangent
-
- .. grid-item-card:: :class:`~objects_curve.ThreePointArc`
-
- .. image:: assets/three_point_arc_example.svg
-
- +++
- Curve define by three points
-
-
***********************
Working on other Planes
***********************
@@ -316,4 +216,12 @@ There are three rules to keep in mind when working with alternate planes in Buil
Finally, BuildLine's workplane need not be one of the predefined ordinal planes, it
could be one created from a surface of a BuildPart part that is currently under
-construction.
\ No newline at end of file
+construction.
+
+*********
+Reference
+*********
+.. py:module:: build_line
+
+.. autoclass:: BuildLine
+ :members:
diff --git a/docs/build_part.rst b/docs/build_part.rst
index 99c7e89..622190e 100644
--- a/docs/build_part.rst
+++ b/docs/build_part.rst
@@ -1,3 +1,12 @@
#########
BuildPart
#########
+
+*********
+Reference
+*********
+
+.. py:module:: build_part
+
+.. autoclass:: BuildPart
+ :members:
diff --git a/docs/build_sketch.rst b/docs/build_sketch.rst
index c8ac718..e72aa52 100644
--- a/docs/build_sketch.rst
+++ b/docs/build_sketch.rst
@@ -1,3 +1,12 @@
###########
BuildSketch
###########
+
+*********
+Reference
+*********
+
+.. py:module:: build_sketch
+
+.. autoclass:: BuildSketch
+ :members:
diff --git a/docs/builder_api_reference.rst b/docs/builder_api_reference.rst
index 2855d6b..1f5a8af 100644
--- a/docs/builder_api_reference.rst
+++ b/docs/builder_api_reference.rst
@@ -1,8 +1,10 @@
.. _builder_api_reference:
-#####################
-Builder API Reference
-#####################
+############################
+Builder Common API Reference
+############################
+
+The following are common to all the builders.
****************
Selector Methods
@@ -40,126 +42,3 @@ Locations
.. autoclass:: build_common::GridLocations
.. autoclass:: build_common::HexLocations
.. autoclass:: build_common::PolarLocations
-
-******************************
-Generic Objects and Operations
-******************************
-
-There are several objects and operations that apply to more than one type
-of builder which are listed here. The builder that these operations apply
-to is determined by context.
-
-.. py:module:: operations_generic
-
-=======
-Objects
-=======
-.. autoclass:: add
-
-==========
-Operations
-==========
-.. autoclass:: bounding_box
-.. autoclass:: chamfer
-.. autoclass:: fillet
-.. autoclass:: mirror
-.. autoclass:: offset
-.. autoclass:: scale
-.. autoclass:: split
-
-*********
-BuildLine
-*********
-.. py:module:: build_line
-
-.. autoclass:: BuildLine
- :members:
-
-.. py:module:: objects_curve
-
-=======
-Objects
-=======
-.. autoclass:: Bezier
-.. autoclass:: CenterArc
-.. autoclass:: EllipticalCenterArc
-.. autoclass:: Helix
-.. autoclass:: JernArc
-.. autoclass:: Line
-.. autoclass:: PolarLine
-.. autoclass:: Polyline
-.. autoclass:: RadiusArc
-.. autoclass:: SagittaArc
-.. autoclass:: Spline
-.. autoclass:: TangentArc
-.. autoclass:: ThreePointArc
-
-***********
-BuildSketch
-***********
-
-.. py:module:: build_sketch
-
-.. autoclass:: BuildSketch
- :members:
-
-.. py:module:: objects_sketch
-
-=======
-Objects
-=======
-.. autoclass:: Circle
-.. autoclass:: Ellipse
-.. autoclass:: Polygon
-.. autoclass:: Rectangle
-.. autoclass:: RectangleRounded
-.. autoclass:: RegularPolygon
-.. autoclass:: SlotArc
-.. autoclass:: SlotCenterPoint
-.. autoclass:: SlotCenterToCenter
-.. autoclass:: SlotOverall
-.. autoclass:: Text
-.. autoclass:: Trapezoid
-
-.. py:module:: operations_sketch
-
-==========
-Operations
-==========
-.. autoclass:: make_face
-.. autoclass:: make_hull
-
-*********
-BuildPart
-*********
-
-.. py:module:: build_part
-
-.. autoclass:: BuildPart
- :members:
-
-.. py:module:: objects_part
-
-=======
-Objects
-=======
-.. autoclass:: Box
-.. autoclass:: Cone
-.. autoclass:: Cylinder
-.. autoclass:: Sphere
-.. autoclass:: Torus
-.. autoclass:: Wedge
-.. autoclass:: CounterBoreHole
-.. autoclass:: CounterSinkHole
-.. autoclass:: Hole
-
-.. py:module:: operations_part
-
-==========
-Operations
-==========
-.. autoclass:: extrude
-.. autoclass:: loft
-.. autoclass:: revolve
-.. autoclass:: section
-.. autoclass:: sweep
diff --git a/docs/index.rst b/docs/index.rst
index 47a5c7a..88f086b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -98,6 +98,8 @@ Table Of Contents
installation.rst
introductory_examples.rst
tutorials.rst
+ objects.rst
+ operations.rst
builders.rst
advanced.rst
cheat_sheet.rst
diff --git a/docs/introductory_examples.rst b/docs/introductory_examples.rst
index ceeca35..8cf8b9f 100644
--- a/docs/introductory_examples.rst
+++ b/docs/introductory_examples.rst
@@ -22,6 +22,7 @@ They are organized from simple to complex, so working through them in order is t
.. contents:: List of Examples
:backlinks: entry
+.. _ex 1:
1. Simple Rectangular Plate
---------------------------------------------------
@@ -43,6 +44,7 @@ Just about the simplest possible example, a rectangular :class:`~objects_part.Bo
:end-before: [Ex. 1]
+.. _ex 2:
2. Plate with Hole
---------------------------------------------------
@@ -72,6 +74,7 @@ A rectangular box, but with a hole added.
:end-before: [Ex. 2]
+.. _ex 3:
3. An extruded prismatic solid
---------------------------------------------------
@@ -100,6 +103,7 @@ Build a prismatic solid using extrusion.
:end-before: [Ex. 3]
+.. _ex 4:
4. Building Profiles using lines and arcs
---------------------------------------------------
@@ -134,6 +138,7 @@ variables for the line segments, but it will be useful in a later example.
Note that to build a closed face it requires line segments that form a closed shape.
+.. _ex 5:
5. Moving the current working point
---------------------------------------------------
@@ -161,6 +166,7 @@ Note that to build a closed face it requires line segments that form a closed sh
:end-before: [Ex. 5]
+.. _ex 6:
6. Using Point Lists
---------------------------------------------------
@@ -191,6 +197,7 @@ Sometimes you need to create a number of features at various
:end-before: [Ex. 6]
+.. _ex 7:
7. Polygons
---------------------------------------------------
@@ -216,6 +223,7 @@ Sometimes you need to create a number of features at various
:end-before: [Ex. 7]
+.. _ex 8:
8. Polylines
---------------------------------------------------
@@ -240,6 +248,7 @@ create the final profile.
:end-before: [Ex. 8]
+.. _ex 9:
9. Selectors, Fillets, and Chamfers
---------------------------------------------------
@@ -268,6 +277,7 @@ their z-position. In this case we want to use the ``[-1]`` group which, by conve
be the highest z-dimension group.
+.. _ex 10:
10. Select Last and Hole
---------------------------------------------------
@@ -297,6 +307,7 @@ be the highest z-dimension group.
:end-before: [Ex. 10]
+.. _ex 11:
11. Use a face as a plane for BuildSketch and introduce GridLocations
----------------------------------------------------------------------------
@@ -339,6 +350,7 @@ Note that the direction implied by positive or negative inputs to amount is rela
normal direction of the face or plane. As a result of this, unexpected behavior can occur
if the extrude direction and mode/operation (ADD / ``+`` or SUBTRACT / ``-``) are not correctly set.
+.. _ex 12:
12. Defining an Edge with a Spline
---------------------------------------------------
@@ -363,6 +375,7 @@ edge that needs a complex profile.
The star ``*`` operator is again used to unpack the list.
+.. _ex 13:
13. CounterBoreHoles, CounterSinkHoles and PolarLocations
-------------------------------------------------------------
@@ -390,6 +403,7 @@ Counter-sink and counter-bore holes are useful for creating recessed areas for f
:class:`~build_common.PolarLocations` creates a list of points that are radially distributed.
+.. _ex 14:
14. Position on a line with '\@', '\%' and introduce Sweep
------------------------------------------------------------
@@ -428,6 +442,7 @@ consuming, and more difficult to maintain.
It is also possible to use :class:`~geometry.Vector` addition (and other vector math operations)
as seen in the ``l3`` variable.
+.. _ex 15:
15. Mirroring Symmetric Geometry
---------------------------------------------------
@@ -453,7 +468,7 @@ Additionally the '@' operator is used to simplify the line segment commands.
:start-after: [Ex. 15]
:end-before: [Ex. 15]
-
+.. _ex 16:
16. Mirroring 3D Objects
---------------------------------------------------
@@ -476,6 +491,7 @@ The ``Plane.offset()`` method shifts the plane in the normal direction (positive
:end-before: [Ex. 16]
+.. _ex 17:
17. Mirroring From Faces
---------------------------------------------------
@@ -498,6 +514,7 @@ Here we select the farthest face in the Y-direction and turn it into a :class:`~
:end-before: [Ex. 17]
+.. _ex 18:
18. Creating Workplanes on Faces
---------------------------------------------------
@@ -524,6 +541,7 @@ with a negative distance.
:end-before: [Ex. 18]
+.. _ex 19:
19. Locating a workplane on a vertex
---------------------------------------------------
@@ -556,6 +574,7 @@ this custom Axis.
:end-before: [Ex. 19]
+.. _ex 20:
20. Offset Sketch Workplane
---------------------------------------------------
@@ -578,6 +597,7 @@ negative x-direction. The resulting Plane is offset from the original position.
:end-before: [Ex. 20]
+.. _ex 21:
21. Create a Workplanes in the center of another shape
-------------------------------------------------------
@@ -600,6 +620,7 @@ positioning another cylinder perpendicular and halfway along the first.
:end-before: [Ex. 21]
+.. _ex 22:
22. Rotated Workplanes
---------------------------------------------------
@@ -629,6 +650,7 @@ example.
extruded in the "both" (positive and negative) normal direction.
+.. _ex 23:
23. Revolve
---------------------------------------------------
@@ -656,6 +678,7 @@ It is highly recommended to view your sketch before you attempt to call revolve.
:end-before: [Ex. 23]
+.. _ex 24:
24. Loft
---------------------------------------------------
@@ -680,6 +703,7 @@ Loft can behave unexpectedly when the input faces are not parallel to each other
:end-before: [Ex. 24]
+.. _ex 25:
25. Offset Sketch
---------------------------------------------------
@@ -706,6 +730,7 @@ They can be offset inwards or outwards, and with different techniques for extend
corners (see :class:`~build_enums.Kind` in the Offset docs).
+.. _ex 26:
26. Offset Part To Create Thin features
---------------------------------------------------
@@ -732,6 +757,7 @@ Note that self intersecting edges and/or faces can break both 2D and 3D offsets.
:end-before: [Ex. 26]
+.. _ex 27:
27. Splitting an Object
---------------------------------------------------
@@ -754,6 +780,7 @@ a face and offset half the width of the box.
:end-before: [Ex. 27]
+.. _ex 28:
28. Locating features based on Faces
---------------------------------------------------
@@ -780,6 +807,7 @@ a face and offset half the width of the box.
We are able to create multiple workplanes by looping over the list of faces.
+.. _ex 29:
29. The Classic OCC Bottle
---------------------------------------------------
@@ -803,6 +831,7 @@ the bottle opening.
:end-before: [Ex. 29]
+.. _ex 30:
30. Bezier Curve
---------------------------------------------------
@@ -826,6 +855,7 @@ create a closed line that is made into a face and extruded.
:end-before: [Ex. 30]
+.. _ex 31:
31. Nesting Locations
---------------------------------------------------
@@ -849,6 +879,7 @@ rotates any "children" groups by default.
:end-before: [Ex. 31]
+.. _ex 32:
32. Python For-Loop
---------------------------------------------------
@@ -875,6 +906,7 @@ separate calls to :meth:`~operations_part.extrude`.
:end-before: [Ex. 32]
+.. _ex 33:
33. Python Function and For-Loop
---------------------------------------------------
@@ -902,6 +934,7 @@ progressively modify the size of each square.
:end-before: [Ex. 33]
+.. _ex 34:
34. Embossed and Debossed Text
---------------------------------------------------
@@ -931,6 +964,7 @@ progressively modify the size of each square.
:end-before: [Ex. 34]
+.. _ex 35:
35. Slots
---------------------------------------------------
@@ -957,6 +991,7 @@ progressively modify the size of each square.
:end-before: [Ex. 35]
+.. _ex 36:
36. Extrude Until
---------------------------------------------------
diff --git a/docs/objects.rst b/docs/objects.rst
new file mode 100644
index 0000000..1860c54
--- /dev/null
+++ b/docs/objects.rst
@@ -0,0 +1,378 @@
+#######
+Objects
+#######
+
+Objects are Python classes that take parameters as inputs and create 1D, 2D or 3D Shapes.
+For example, a :class:`~objects_part.Torus` is defined by a major and minor radii. In
+Builder mode, objects are positioned with ``Locations`` while in Algebra mode, objects
+are positioned with the ``*`` operator and shown in these examples:
+
+.. code-block:: python
+
+ with BuildPart() as disk:
+ with BuildSketch():
+ Circle(a)
+ with Locations((b, 0.0)):
+ Rectangle(c, c, mode=Mode.SUBTRACT)
+ with Locations((0, b)):
+ Circle(d, mode=Mode.SUBTRACT)
+ extrude(amount=c)
+
+.. code-block:: python
+
+ sketch = Circle(a) - Pos(b, 0.0) * Rectangle(c, c) - Pos(0.0, b) * Circle(d)
+ disk = extrude(sketch, c)
+
+The following sections describe the 1D, 2D and 3D objects:
+
+Align
+-----
+
+2D/Sketch and 3D/Part objects can be aligned relative to themselves, either centered, or justified
+right or left of each Axis. The following diagram shows how this alignment works in 2D:
+
+.. image:: assets/align.svg
+
+For example:
+
+.. code-block:: python
+
+ with BuildSketch():
+ Circle(1, align=(Align.MIN, Align.MIN))
+
+creates a circle who's minimal X and Y values are on the X and Y axis and is located in the top right corner.
+The ``Align`` enum has values: ``MIN``, ``CENTER`` and ``MAX``.
+
+In 3D the ``align`` parameter also contains a Z align value but otherwise works in the same way.
+
+Note that the ``align`` will also accept a single ``Align`` value which will be used on all axes -
+as shown here:
+
+.. code-block:: python
+
+ with BuildSketch():
+ Circle(1, align=Align.MIN)
+
+Mode
+----
+
+With the Builder API the ``mode`` parameter controls how objects are combined with lines, sketches, or parts
+under construction. The ``Mode`` enum has values:
+
+* ``ADD``: fuse this object to the object under construction
+* ``SUBTRACT``: cut this object from the object under construction
+* ``INTERSECT``: intersect this object with the object under construction
+* ``REPLACE``: replace the object under construction with this object
+* ``PRIVATE``: don't interact with the object under construction at all
+
+The Algebra API doesn't use the ``mode`` parameter - users combine objects with operators.
+
+1D Objects
+----------
+
+The following objects all can be used in BuildLine contexts. Note that
+1D objects are not affected by ``Locations`` in Builder mode.
+
+.. grid:: 3
+
+ .. grid-item-card:: :class:`~objects_curve.Bezier`
+
+ .. image:: assets/bezier_curve_example.svg
+
+ +++
+ Curve defined by control points and weights
+
+ .. grid-item-card:: :class:`~objects_curve.CenterArc`
+
+ .. image:: assets/center_arc_example.svg
+
+ +++
+ Arc defined by center, radius, & angles
+
+ .. grid-item-card:: :class:`~objects_curve.EllipticalCenterArc`
+
+ .. image:: assets/elliptical_center_arc_example.svg
+
+ +++
+ Elliptical arc defined by center, radii & angles
+
+ .. grid-item-card:: :class:`~objects_curve.Helix`
+
+ .. image:: assets/helix_example.svg
+
+ +++
+ Helix defined pitch, radius and height
+
+ .. grid-item-card:: :class:`~objects_curve.JernArc`
+
+ .. image:: assets/jern_arc_example.svg
+
+ +++
+ Arc define by start point, tangent, radius and angle
+
+ .. grid-item-card:: :class:`~objects_curve.Line`
+
+ .. image:: assets/line_example.svg
+
+ +++
+ Line defined by end points
+
+ .. grid-item-card:: :class:`~objects_curve.PolarLine`
+
+ .. image:: assets/polar_line_example.svg
+
+ +++
+ Line defined by start, angle and length
+
+ .. grid-item-card:: :class:`~objects_curve.Polyline`
+
+ .. image:: assets/polyline_example.svg
+
+ +++
+ Multiple line segments defined by points
+
+ .. grid-item-card:: :class:`~objects_curve.RadiusArc`
+
+ .. image:: assets/radius_arc_example.svg
+
+ +++
+ Arc define by two points and a radius
+
+ .. grid-item-card:: :class:`~objects_curve.SagittaArc`
+
+ .. image:: assets/sagitta_arc_example.svg
+
+ +++
+ Arc define by two points and a sagitta
+
+ .. grid-item-card:: :class:`~objects_curve.Spline`
+
+ .. image:: assets/spline_example.svg
+
+ +++
+ Curve define by points
+
+ .. grid-item-card:: :class:`~objects_curve.TangentArc`
+
+ .. image:: assets/tangent_arc_example.svg
+
+ +++
+ Curve define by two points and a tangent
+
+ .. grid-item-card:: :class:`~objects_curve.ThreePointArc`
+
+ .. image:: assets/three_point_arc_example.svg
+
+ +++
+ Curve define by three points
+
+
+Reference
+^^^^^^^^^
+.. py:module:: objects_curve
+
+.. autoclass:: Bezier
+.. autoclass:: CenterArc
+.. autoclass:: EllipticalCenterArc
+.. autoclass:: Helix
+.. autoclass:: JernArc
+.. autoclass:: Line
+.. autoclass:: PolarLine
+.. autoclass:: Polyline
+.. autoclass:: RadiusArc
+.. autoclass:: SagittaArc
+.. autoclass:: Spline
+.. autoclass:: TangentArc
+.. autoclass:: ThreePointArc
+
+2D Objects
+----------
+
+.. grid:: 3
+
+ .. grid-item-card:: :class:`~objects_sketch.Circle`
+
+ .. image:: assets/circle_example.svg
+
+ +++
+ Circle defined by radius
+
+
+ .. grid-item-card:: :class:`~objects_sketch.Ellipse`
+
+ .. image:: assets/ellipse_example.svg
+
+ +++
+ Ellipse defined by major and minor radius
+
+ .. grid-item-card:: :class:`~objects_sketch.Polygon`
+
+ .. image:: assets/polygon_example.svg
+
+ +++
+ Polygon defined by points
+
+ .. grid-item-card:: :class:`~objects_sketch.Rectangle`
+
+ .. image:: assets/rectangle_example.svg
+
+ +++
+ Rectangle defined by width and height
+
+ .. grid-item-card:: :class:`~objects_sketch.RectangleRounded`
+
+ .. image:: assets/rectangle_rounded_example.svg
+
+ +++
+ Rectangle with rounded corners defined by width, height, and radius
+
+ .. grid-item-card:: :class:`~objects_sketch.RegularPolygon`
+
+ .. image:: assets/regular_polygon_example.svg
+
+ +++
+ RegularPolygon defined by radius and number of sides
+
+ .. grid-item-card:: :class:`~objects_sketch.SlotArc`
+
+ .. image:: assets/slot_arc_example.svg
+
+ +++
+ SlotArc defined by arc and height
+
+ .. grid-item-card:: :class:`~objects_sketch.SlotCenterPoint`
+
+ .. image:: assets/slot_center_point_example.svg
+
+ +++
+ SlotCenterPoint defined by two points and a height
+
+ .. grid-item-card:: :class:`~objects_sketch.SlotCenterToCenter`
+
+ .. image:: assets/slot_center_to_center_example.svg
+
+ +++
+ SlotCenterToCenter defined by center separation and height
+
+ .. grid-item-card:: :class:`~objects_sketch.SlotOverall`
+
+ .. image:: assets/slot_overall_example.svg
+
+ +++
+ SlotOverall defined by end-to-end length and height
+
+ .. grid-item-card:: :class:`~objects_sketch.Text`
+
+ .. image:: assets/text_example.svg
+
+ +++
+ Text defined by string and font parameters
+
+ .. grid-item-card:: :class:`~objects_sketch.Trapezoid`
+
+ .. image:: assets/trapezoid_example.svg
+
+ +++
+ Trapezoid defined by width, height and interior angles
+
+
+
+Reference
+^^^^^^^^^
+.. py:module:: objects_sketch
+
+.. autoclass:: Circle
+.. autoclass:: Ellipse
+.. autoclass:: Polygon
+.. autoclass:: Rectangle
+.. autoclass:: RectangleRounded
+.. autoclass:: RegularPolygon
+.. autoclass:: SlotArc
+.. autoclass:: SlotCenterPoint
+.. autoclass:: SlotCenterToCenter
+.. autoclass:: SlotOverall
+.. autoclass:: Text
+.. autoclass:: Trapezoid
+
+3D Objects
+----------
+
+.. grid:: 3
+
+ .. grid-item-card:: :class:`~objects_part.Box`
+
+ .. image:: assets/box_example.svg
+
+ +++
+ Box defined by length, width, height
+
+ .. grid-item-card:: :class:`~objects_part.Cone`
+
+ .. image:: assets/cone_example.svg
+
+ +++
+ Cone defined by radii and height
+
+ .. grid-item-card:: :class:`~objects_part.CounterBoreHole`
+
+ .. image:: assets/counter_bore_hole_example.svg
+
+ +++
+ Counter bore hole defined by radii and depths
+
+ .. grid-item-card:: :class:`~objects_part.CounterSinkHole`
+
+ .. image:: assets/counter_sink_hole_example.svg
+
+ +++
+ Counter sink hole defined by radii and depth and angle
+
+ .. grid-item-card:: :class:`~objects_part.Cylinder`
+
+ .. image:: assets/cylinder_example.svg
+
+ +++
+ Cylinder defined by radius and height
+
+ .. grid-item-card:: :class:`~objects_part.Hole`
+
+ .. image:: assets/hole_example.svg
+
+ +++
+ Hole defined by radius and depth
+
+ .. grid-item-card:: :class:`~objects_part.Sphere`
+
+ .. image:: assets/sphere_example.svg
+
+ +++
+ Sphere defined by radius and arc angles
+
+ .. grid-item-card:: :class:`~objects_part.Torus`
+
+ .. image:: assets/torus_example.svg
+
+ +++
+ Torus defined major and minor radii
+
+ .. grid-item-card:: :class:`~objects_part.Wedge`
+
+ .. image:: assets/wedge_example.svg
+
+ +++
+ Wedge defined by lengths along multiple Axes
+
+
+Reference
+^^^^^^^^^
+.. py:module:: objects_part
+
+.. autoclass:: Box
+.. autoclass:: Cone
+.. autoclass:: Cylinder
+.. autoclass:: Sphere
+.. autoclass:: Torus
+.. autoclass:: Wedge
+.. autoclass:: CounterBoreHole
+.. autoclass:: CounterSinkHole
+.. autoclass:: Hole
diff --git a/docs/buildline_examples.py b/docs/objects_1d.py
similarity index 100%
rename from docs/buildline_examples.py
rename to docs/objects_1d.py
diff --git a/docs/objects_2d.py b/docs/objects_2d.py
new file mode 100644
index 0000000..ff9a908
--- /dev/null
+++ b/docs/objects_2d.py
@@ -0,0 +1,189 @@
+# [Setup]
+from build123d import *
+
+# [Setup]
+svg_opts1 = {"pixel_scale": 100, "show_axes": False, "show_hidden": False}
+svg_opts2 = {"pixel_scale": 300, "show_axes": True, "show_hidden": False}
+
+# [Ex. 1]
+with BuildSketch() as example_1:
+ Circle(1)
+# [Ex. 1]
+example_1.sketch.export_svg(
+ "assets/circle_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+# [Ex. 2]
+with BuildSketch() as example_2:
+ Ellipse(1.5, 1)
+# [Ex. 2]
+example_2.sketch.export_svg(
+ "assets/ellipse_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 3]
+with BuildSketch() as example_3:
+ inner = PolarLocations(0.5, 5, 0).local_locations
+ outer = PolarLocations(1.5, 5, 36).local_locations
+ points = [p.position for pair in zip(inner, outer) for p in pair]
+ Polygon(*points)
+# [Ex. 3]
+example_3.sketch.export_svg(
+ "assets/polygon_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 4]
+with BuildSketch() as example_4:
+ Rectangle(2, 1)
+# [Ex. 4]
+example_4.sketch.export_svg(
+ "assets/rectangle_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 5]
+with BuildSketch() as example_5:
+ RectangleRounded(2, 1, 0.25)
+# [Ex. 5]
+example_5.sketch.export_svg(
+ "assets/rectangle_rounded_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 6]
+with BuildSketch() as example_6:
+ RegularPolygon(1, 6)
+# [Ex. 6]
+example_6.sketch.export_svg(
+ "assets/regular_polygon_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 7]
+with BuildSketch() as example_7:
+ arc = Edge.make_circle(1, start_angle=0, end_angle=45)
+ SlotArc(arc, 0.25)
+ SlotArc(arc, 0.01, mode=Mode.SUBTRACT)
+# [Ex. 7]
+example_7.sketch.export_svg(
+ "assets/slot_arc_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 8]
+with BuildSketch() as example_8:
+ c = (0, 0)
+ p = (1, 0)
+ SlotCenterPoint(c, p, 0.25)
+ with Locations(c):
+ Circle(0.02, mode=Mode.SUBTRACT)
+ with Locations(p):
+ Circle(0.02, mode=Mode.SUBTRACT)
+# [Ex. 8]
+example_8.sketch.export_svg(
+ "assets/slot_center_point_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 9]
+with BuildSketch() as example_9:
+ SlotCenterToCenter(1, 0.25)
+# [Ex. 9]
+example_9.sketch.export_svg(
+ "assets/slot_center_to_center_example.svg",
+ (0, 0, 100),
+ (0, 1, 0),
+ svg_opts=svg_opts1,
+)
+
+# [Ex. 10]
+with BuildSketch() as example_10:
+ SlotOverall(1, 0.25)
+# [Ex. 10]
+example_10.sketch.export_svg(
+ "assets/slot_overall_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 11]
+with BuildSketch() as example_11:
+ Text("text", 1)
+# [Ex. 11]
+example_11.sketch.export_svg(
+ "assets/text_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Ex. 12]
+with BuildSketch() as example_12:
+ Trapezoid(2, 1, 80)
+ with Locations((-0.75, -0.35)):
+ Text("80", 0.2, mode=Mode.SUBTRACT)
+# [Ex. 12]
+example_12.sketch.export_svg(
+ "assets/trapezoid_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+)
+
+# [Align]
+with BuildSketch() as align:
+ with GridLocations(1, 1, 2, 2):
+ Circle(0.5)
+ Circle(0.49, mode=Mode.SUBTRACT)
+ with GridLocations(1, 1, 1, 2):
+ Circle(0.5)
+ Circle(0.49, mode=Mode.SUBTRACT)
+ with GridLocations(1, 1, 2, 1):
+ Circle(0.5)
+ Circle(0.49, mode=Mode.SUBTRACT)
+ with Locations((0, 0)):
+ Circle(0.5)
+ Circle(0.49, mode=Mode.SUBTRACT)
+
+ # Top Right: (MIN, MIN)
+ with Locations((0.75, 0.75)):
+ Text("MIN\nMIN", font="FreeSerif", font_size=0.07)
+ # Top Center: (CENTER, MIN)
+ with Locations((0.0, 0.75 + 0.07 / 2)):
+ Text("CENTER", font="FreeSerif", font_size=0.07)
+ with Locations((0.0, 0.75 - 0.07 / 2)):
+ Text("MIN", font="FreeSerif", font_size=0.07)
+ # Top Left: (MAX, MIN)
+ with Locations((-0.75, 0.75 + 0.07 / 2)):
+ Text("MAX", font="FreeSerif", font_size=0.07)
+ with Locations((-0.75, 0.75 - 0.07 / 2)):
+ Text("MIN", font="FreeSerif", font_size=0.07)
+ # Center Right: (MIN, CENTER)
+ with Locations((0.75, 0.07 / 2)):
+ Text("MIN", font="FreeSerif", font_size=0.07)
+ with Locations((0.75, -0.07 / 2)):
+ Text("CENTER", font="FreeSerif", font_size=0.07)
+ # Center: (CENTER, CENTER)
+ with Locations((0, 0)):
+ Text("CENTER\nCENTER", font="FreeSerif", font_size=0.07)
+ # Center Left: (MAX, CENTER)
+ with Locations((-0.75, 0.07 / 2)):
+ Text("MAX", font="FreeSerif", font_size=0.07)
+ with Locations((-0.75, -0.07 / 2)):
+ Text("CENTER", font="FreeSerif", font_size=0.07)
+ # Bottom Right: (MIN, MAX)
+ with Locations((0.75, -0.75 + 0.07 / 2)):
+ Text("MIN", font="FreeSerif", font_size=0.07)
+ with Locations((0.75, -0.75 - 0.07 / 2)):
+ Text("MAX", font="FreeSerif", font_size=0.07)
+ # Bottom Center: (CENTER, MAX)
+ with Locations((0.0, -0.75 + 0.07 / 2)):
+ Text("MAX", font="FreeSerif", font_size=0.07)
+ with Locations((0.0, -0.75 - 0.07 / 2)):
+ Text("CENTER", font="FreeSerif", font_size=0.07)
+ # Bottom Left: (MAx, MAX)
+ with Locations((-0.75, -0.75)):
+ Text("MAX\nMAX", font="FreeSerif", font_size=0.07)
+
+align.sketch.export_svg("assets/align.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts2)
+
+if "show_object" in locals():
+ # show_object(example_1.sketch, name="Ex. 1")
+ # show_object(example_2.sketch, name="Ex. 2")
+ # show_object(example_3.sketch, name="Ex. 3")
+ # show_object(example_4.sketch, name="Ex. 4")
+ # show_object(example_5.sketch, name="Ex. 5")
+ # show_object(example_6.sketch, name="Ex. 6")
+ # show_object(example_7.sketch, name="Ex. 7")
+ # show_object(example_8.sketch, name="Ex. 8")
+ # show_object(example_9.sketch, name="Ex. 9")
+ # show_object(example_10.sketch, name="Ex. 10")
+ # show_object(example_11.sketch, name="Ex. 11")
+ # show_object(example_12.sketch, name="Ex. 12")
+ show_object(align.sketch, name="align")
diff --git a/docs/objects_3d.py b/docs/objects_3d.py
new file mode 100644
index 0000000..675b278
--- /dev/null
+++ b/docs/objects_3d.py
@@ -0,0 +1,182 @@
+# [Setup]
+from build123d import *
+
+# [Setup]
+svg_opts1 = {"pixel_scale": 100, "show_axes": False, "show_hidden": True}
+svg_opts2 = {"pixel_scale": 50, "show_axes": True, "show_hidden": False}
+
+# [Ex. 1]
+with BuildPart() as example_1:
+ Box(3, 2, 1)
+# [Ex. 1]
+example_1.part.export_svg(
+ "assets/box_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+# [Ex. 2]
+with BuildPart() as example_2:
+ Cone(2, 1, 2)
+# [Ex. 2]
+example_2.part.export_svg(
+ "assets/cone_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+
+# [Ex. 3]
+with BuildPart() as example_3:
+ Box(3, 2, 1)
+ with Locations(example_3.faces().sort_by(Axis.Z)[-1]):
+ CounterBoreHole(0.2, 0.4, 0.5, 0.9)
+# [Ex. 3]
+example_3.part.export_svg(
+ "assets/counter_bore_hole_example.svg",
+ (-100, -50, 30),
+ (0, 0, 1),
+ svg_opts=svg_opts1,
+)
+
+# [Ex. 4]
+with BuildPart() as example_4:
+ Box(3, 2, 1)
+ with Locations(example_3.faces().sort_by(Axis.Z)[-1]):
+ CounterSinkHole(0.2, 0.4, 0.9)
+# [Ex. 4]
+example_4.part.export_svg(
+ "assets/counter_sink_hole_example.svg",
+ (-100, -50, 30),
+ (0, 0, 1),
+ svg_opts=svg_opts1,
+)
+# [Ex. 5]
+with BuildPart() as example_5:
+ Cylinder(1, 2)
+# [Ex. 5]
+example_5.part.export_svg(
+ "assets/cylinder_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+# [Ex. 6]
+with BuildPart() as example_6:
+ Box(3, 2, 1)
+ Hole(0.4)
+# [Ex. 6]
+example_6.part.export_svg(
+ "assets/hole_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+# [Ex. 7]
+with BuildPart() as example_7:
+ Sphere(1, 0)
+# [Ex. 7]
+example_7.part.export_svg(
+ "assets/sphere_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+# [Ex. 8]
+with BuildPart() as example_8:
+ Torus(1, 0.2)
+# [Ex. 8]
+example_8.part.export_svg(
+ "assets/torus_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+# [Ex. 9]
+with BuildPart() as example_9:
+ Wedge(1, 1, 1, 0, 0, 0.5, 0.5)
+# [Ex. 9]
+example_9.part.export_svg(
+ "assets/wedge_example.svg", (-100, -50, 30), (0, 0, 1), svg_opts=svg_opts1
+)
+
+# # [Ex. 4]
+# with BuildPart() as example_4:
+# Rectangle(2, 1)
+# # [Ex. 4]
+# example_4.part.export_svg(
+# "assets/rectangle_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 5]
+# with BuildPart() as example_5:
+# RectangleRounded(2, 1, 0.25)
+# # [Ex. 5]
+# example_5.part.export_svg(
+# "assets/rectangle_rounded_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 6]
+# with BuildPart() as example_6:
+# RegularPolygon(1, 6)
+# # [Ex. 6]
+# example_6.part.export_svg(
+# "assets/regular_polygon_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 7]
+# with BuildPart() as example_7:
+# arc = Edge.make_circle(1, start_angle=0, end_angle=45)
+# SlotArc(arc, 0.25)
+# SlotArc(arc, 0.01, mode=Mode.SUBTRACT)
+# # [Ex. 7]
+# example_7.part.export_svg(
+# "assets/slot_arc_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 8]
+# with BuildPart() as example_8:
+# c = (0, 0)
+# p = (1, 0)
+# SlotCenterPoint(c, p, 0.25)
+# with Locations(c):
+# Circle(0.02, mode=Mode.SUBTRACT)
+# with Locations(p):
+# Circle(0.02, mode=Mode.SUBTRACT)
+# # [Ex. 8]
+# example_8.part.export_svg(
+# "assets/slot_center_point_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 9]
+# with BuildPart() as example_9:
+# SlotCenterToCenter(1, 0.25)
+# # [Ex. 9]
+# example_9.part.export_svg(
+# "assets/slot_center_to_center_example.svg",
+# (0, 0, 100),
+# (0, 1, 0),
+# svg_opts=svg_opts1,
+# )
+
+# # [Ex. 10]
+# with BuildPart() as example_10:
+# SlotOverall(1, 0.25)
+# # [Ex. 10]
+# example_10.part.export_svg(
+# "assets/slot_overall_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 11]
+# with BuildPart() as example_11:
+# Text("text", 1)
+# # [Ex. 11]
+# example_11.part.export_svg(
+# "assets/text_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+# # [Ex. 12]
+# with BuildPart() as example_12:
+# Trapezoid(2, 1, 80)
+# with Locations((-0.75, -0.35)):
+# Text("80", 0.2, mode=Mode.SUBTRACT)
+# # [Ex. 12]
+# example_12.part.export_svg(
+# "assets/trapezoid_example.svg", (0, 0, 100), (0, 1, 0), svg_opts=svg_opts1
+# )
+
+if "show_object" in locals():
+ show_object(example_1.part, name="Ex. 1")
+ # show_object(example_2.part, name="Ex. 2")
+ # show_object(example_3.part, name="Ex. 3")
+ # show_object(example_4.part, name="Ex. 4")
+ # show_object(example_5.part, name="Ex. 5")
+ # show_object(example_6.part, name="Ex. 6")
+ # show_object(example_7.part, name="Ex. 7")
+ # show_object(example_8.part, name="Ex. 8")
+ # show_object(example_9.part, name="Ex. 9")
+ # show_object(example_10.part, name="Ex. 10")
+ # show_object(example_11.part, name="Ex. 11")
+ # show_object(example_12.part, name="Ex. 12")
diff --git a/docs/operations.rst b/docs/operations.rst
new file mode 100644
index 0000000..840f5c0
--- /dev/null
+++ b/docs/operations.rst
@@ -0,0 +1,73 @@
+##########
+Operations
+##########
+
+Operations are functions that take objects as inputs and transform them into new objects. For example, a 2D Sketch can be extruded to create a 3D Part. All operations are Python functions which can be applied using both the Algebra and Builder APIs. It's important to note that objects created by operations are not affected by ``Locations``, meaning their position is determined solely by the input objects used in the operation.
+
+Here are a couple ways to use :func:`~operations_part.extrude`, in Builder and Algebra mode:
+
+.. code-block:: python
+
+ with BuildPart() as cylinder:
+ with BuildSketch():
+ Circle(radius)
+ extrude(amount=height)
+
+.. code-block:: python
+
+ cylinder = extrude(Circle(radius), amount=height)
+
+The following table summarizes all of the available operations. Operations marked as 1D are
+applicable to BuildLine and Algebra Curve, 2D to BuildSketch and Algebra Sketch, 3D to
+BuildPart and Algebra Part.
+
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| Operation | Description | 1D | 2D | 3D | Example |
++==========================================+==================================+====+====+====+================================+
+| :func:`~operations_generic.add` | Add object to builder | ✓ | ✓ | ✓ | :ref:`16 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.bounding_box` | Add bounding box as Shape | ✓ | ✓ | ✓ | |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.chamfer` | Bevel Vertex or Edge | | ✓ | ✓ | :ref:`9 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_part.extrude` | Draw 2D Shape into 3D | | | ✓ | :ref:`3 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.fillet` | Radius Vertex or Edge | | ✓ | ✓ | :ref:`9 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.mirror` | Mirror about Plane | ✓ | ✓ | ✓ | :ref:`15 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.offset` | Inset or outset Shape | ✓ | ✓ | ✓ | :ref:`25 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_part.loft` | Create 3D Shape from sections | | | ✓ | :ref:`24 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_sketch.make_face` | Create a Face from Edges | | ✓ | | :ref:`4 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_sketch.make_hull` | Create Convex Hull from Edges | | ✓ | | |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_part.revolve` | Swing 2D Shape about Axis | | | ✓ | :ref:`23 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.scale` | Change size of Shape | ✓ | ✓ | ✓ | |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_part.section` | Generate 2D slices from 3D Shape | | | ✓ | |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_generic.split` | Divide object by Plane | ✓ | ✓ | ✓ | :ref:`27 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+| :func:`~operations_part.sweep` | Extrude 2D section(s) along path | | | ✓ | :ref:`14 ` |
++------------------------------------------+----------------------------------+----+----+----+--------------------------------+
+
+Reference
+^^^^^^^^^
+.. autoclass:: operations_generic.bounding_box
+.. autoclass:: operations_generic.chamfer
+.. autoclass:: operations_part.extrude
+.. autoclass:: operations_generic.fillet
+.. autoclass:: operations_part.loft
+.. autoclass:: operations_sketch.make_face
+.. autoclass:: operations_sketch.make_hull
+.. autoclass:: operations_generic.mirror
+.. autoclass:: operations_generic.offset
+.. autoclass:: operations_part.revolve
+.. autoclass:: operations_generic.scale
+.. autoclass:: operations_part.section
+.. autoclass:: operations_generic.split
+.. autoclass:: operations_part.sweep