From 72827ff999fd51f7fb7dc42ee6bf9bced07c91ae Mon Sep 17 00:00:00 2001 From: gumyr Date: Sat, 17 Feb 2024 11:20:36 -0500 Subject: [PATCH] Adding Stud Wall & Platonic Solids examples --- docs/assets/examples/platonic_solids.png | Bin 0 -> 43860 bytes docs/assets/examples/stud_wall.png | Bin 0 -> 45873 bytes docs/examples_1.rst | 66 ++++++++-- examples/platonic_solids.py | 140 +++++++++++++++++++++ examples/stud_wall.py | 148 +++++++++++++++++++++++ 5 files changed, 347 insertions(+), 7 deletions(-) create mode 100644 docs/assets/examples/platonic_solids.png create mode 100644 docs/assets/examples/stud_wall.png create mode 100644 examples/platonic_solids.py create mode 100644 examples/stud_wall.py diff --git a/docs/assets/examples/platonic_solids.png b/docs/assets/examples/platonic_solids.png new file mode 100644 index 0000000000000000000000000000000000000000..91edf93e1df46d107e95843765d466cbe966ab41 GIT binary patch literal 43860 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%0DGg)4`{o{7 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 literal 0 HcmV?d00001 diff --git a/docs/assets/examples/stud_wall.png b/docs/assets/examples/stud_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..000ed1fb58323c453ea98aa320a5fbcc67c0c023 GIT binary patch literal 45873 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 +In the GitHub repository you will find an `examples folder `_. Most of the examples show the builder and algebra modes. @@ -39,18 +39,26 @@ Most of the examples show the builder and algebra modes. :link: examples-build123d_logo :link-type: ref - .. grid-item-card:: Circuit Board With Holes |Builder| |Algebra| - :img-top: assets/examples/thumbnail_canadian_flag_01.png + :img-top: assets/examples/thumbnail_circuit_board_01.png :link: examples-canadian_flag :link-type: ref - .. grid-item-card:: Canadian Flag Blowing in The Wind |Builder| |Algebra| - :img-top: assets/examples/thumbnail_circuit_board_01.png + :img-top: assets/examples/thumbnail_canadian_flag_01.png :link: examples-circuit_board :link-type: ref - + + .. grid-item-card:: Stud Wall |Algebra| + :img-top: assets/examples/stud_wall.png + :link: stud_wall + :link-type: ref + + .. grid-item-card:: Platonic Solids |Algebra| + :img-top: assets/examples/platonic_solids.png + :link: platonic_solids + :link-type: ref + .. NOTE 01: insert new example thumbnails above this line .. TODO: Copy this block to add the example thumbnails here @@ -71,7 +79,8 @@ Low Poly Benchy :align: center -The Benchy examples shows hot to import a STL model as a `Solid` object with the class `Mesher` and change it to low poly. +The Benchy examples shows how to import a STL model as a `Solid` object with the class `Mesher` and +modify it by replacing chimney with a BREP version. .. note @@ -240,6 +249,49 @@ This example demonstrates placing holes around a part. :start-after: [Code] :end-before: [End] +.. _stud_wall: + +Stud Wall +--------- +.. image:: assets/examples/stud_wall.png + :align: center + +This example demonstrates creatings custom `Part` objects and putting them into +assemblies. The custom object is a `Stud` used in the building industry while +the assembly is a `StudWall` created from copies of `Stud` objects for efficiency. +Both the `Stud` and `StudWall` objects use `RigidJoints` to define snap points which +are used to position all of objects. + +.. dropdown:: |Algebra| Reference Implementation (Algebra Mode) + + .. literalinclude:: ../examples/stud_wall.py + :start-after: [Code] + :end-before: [End] + +.. _platonic_solids: + +Platonic Solids +--------------- +.. image:: assets/examples/platonic_solids.png + :align: center + +This example creates a custom Part object PlatonicSolid. + +Platonic solids are five three-dimensional shapes that are highly symmetrical, +known since antiquity and named after the ancient Greek philosopher Plato. +These solids are unique because their faces are congruent regular polygons, +with the same number of faces meeting at each vertex. The five Platonic solids +are the tetrahedron (4 triangular faces), cube (6 square faces), octahedron +(8 triangular faces), dodecahedron (12 pentagonal faces), and icosahedron +(20 triangular faces). Each solid represents a unique way in which identical +polygons can be arranged in three dimensions to form a convex polyhedron, +embodying ideals of symmetry and balance. + +.. dropdown:: |Algebra| Reference Implementation (Algebra Mode) + + .. literalinclude:: ../examples/platonic_solids.py + :start-after: [Code] + :end-before: [End] .. NOTE 02: insert new example thumbnails above this line diff --git a/examples/platonic_solids.py b/examples/platonic_solids.py new file mode 100644 index 00000000..792bdefe --- /dev/null +++ b/examples/platonic_solids.py @@ -0,0 +1,140 @@ +""" +The Platonic solids as custom Part objects. + +name: platonic_solids.py +by: Gumyr +date: February 17, 2024 + +desc: + This example creates a custom Part object PlatonicSolid. + + Platonic solids are five three-dimensional shapes that are highly symmetrical, + known since antiquity and named after the ancient Greek philosopher Plato. + These solids are unique because their faces are congruent regular polygons, + with the same number of faces meeting at each vertex. The five Platonic solids + are the tetrahedron (4 triangular faces), cube (6 square faces), octahedron + (8 triangular faces), dodecahedron (12 pentagonal faces), and icosahedron + (20 triangular faces). Each solid represents a unique way in which identical + polygons can be arranged in three dimensions to form a convex polyhedron, + embodying ideals of symmetry and balance. + +license: + + Copyright 2024 Gumyr + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +""" + +# [Code] +from build123d import * +from math import sqrt +from typing import Union, Literal +from scipy.spatial import ConvexHull + +from ocp_vscode import show + +PHI = (1 + sqrt(5)) / 2 # The Golden Ratio + + +class PlatonicSolid(BasePartObject): + """Part Object: Platonic Solid + + Create one of the five convex Platonic solids. + + Args: + face_count (Literal[4,6,8,12,20]): number of faces + diameter (float): double distance to vertices, i.e. maximum size + rotation (RotationLike, optional): angles to rotate about axes. Defaults to (0, 0, 0). + align (Union[None, Align, tuple[Align, Align, Align]], optional): align min, center, + or max of object. Defaults to None. + mode (Mode, optional): combine mode. Defaults to Mode.ADD. + """ + + tetrahedron_vertices = [(1, 1, 1), (1, -1, -1), (-1, 1, -1), (-1, -1, 1)] + + cube_vertices = [(i, j, k) for i in [-1, 1] for j in [-1, 1] for k in [-1, 1]] + + octahedron_vertices = ( + [(i, 0, 0) for i in [-1, 1]] + + [(0, i, 0) for i in [-1, 1]] + + [(0, 0, i) for i in [-1, 1]] + ) + + dodecahedron_vertices = ( + [(i, j, k) for i in [-1, 1] for j in [-1, 1] for k in [-1, 1]] + + [(0, i / PHI, j * PHI) for i in [-1, 1] for j in [-1, 1]] + + [(i / PHI, j * PHI, 0) for i in [-1, 1] for j in [-1, 1]] + + [(i * PHI, 0, j / PHI) for i in [-1, 1] for j in [-1, 1]] + ) + + icosahedron_vertices = ( + [(0, i, j * PHI) for i in [-1, 1] for j in [-1, 1]] + + [(i, j * PHI, 0) for i in [-1, 1] for j in [-1, 1]] + + [(i * PHI, 0, j) for i in [-1, 1] for j in [-1, 1]] + ) + + vertices_lookup = { + 4: tetrahedron_vertices, + 6: cube_vertices, + 8: octahedron_vertices, + 12: dodecahedron_vertices, + 20: icosahedron_vertices, + } + _applies_to = [BuildPart._tag] + + def __init__( + self, + face_count: Literal[4, 6, 8, 12, 20], + diameter: float = 1.0, + rotation: RotationLike = (0, 0, 0), + align: Union[None, Align, tuple[Align, Align, Align]] = None, + mode: Mode = Mode.ADD, + ): + try: + platonic_vertices = PlatonicSolid.vertices_lookup[face_count] + except KeyError: + raise ValueError( + f"face_count must be one of 4, 6, 8, 12, or 20 not {face_count}" + ) + + # Create a convex hull from the vertices + hull = ConvexHull(platonic_vertices).simplices.tolist() + + # Create faces from the vertex indices + platonic_faces = [] + for face_vertex_indices in hull: + corner_vertices = [platonic_vertices[i] for i in face_vertex_indices] + platonic_faces.append( + Face.make_from_wires(Wire.make_polygon(corner_vertices)) + ) + + # Create the solid from the Faces + platonic_solid = Solid.make_solid(Shell.make_shell(platonic_faces)).clean() + + # By definition, all vertices are the same distance from the origin so + # scale proportionally to this distance + platonic_solid = platonic_solid.scale( + (diameter / 2) / Vector(platonic_solid.vertices()[0]).length + ) + + super().__init__(part=platonic_solid, rotation=rotation, align=align, mode=mode) + + +solids = [ + Rot(0, 0, 72 * i) * Pos(1, 0, 0) * PlatonicSolid(faces) + for i, faces in enumerate([4, 6, 8, 12, 20]) +] +show(solids) + +# [End] diff --git a/examples/stud_wall.py b/examples/stud_wall.py new file mode 100644 index 00000000..c38725cc --- /dev/null +++ b/examples/stud_wall.py @@ -0,0 +1,148 @@ +""" +Stud Wall creation using RigidJoints to position components. + +name: stud_wall.py +by: Gumyr +date: February 17, 2024 + +desc: + This example builds stud walls from dimensional lumber as an assembly + with the parts positioned with RigidJoints. + +license: + + Copyright 2024 Gumyr + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +""" + +from build123d import * +from ocp_vscode import show +from typing import Union +import copy + + +# [Code] +class Stud(BasePartObject): + """Part Object: Stud + + Create a dimensional framing stud. + + Args: + length (float): stud size + width (float): stud size + thickness (float): stud size + rotation (RotationLike, optional): angles to rotate about axes. Defaults to (0, 0, 0). + align (Union[Align, tuple[Align, Align, Align]], optional): align min, center, + or max of object. Defaults to (Align.CENTER, Align.CENTER, Align.MIN). + mode (Mode, optional): combine mode. Defaults to Mode.ADD. + """ + + _applies_to = [BuildPart._tag] + + def __init__( + self, + length: float = 8 * FT, + width: float = 3.5 * IN, + thickness: float = 1.5 * IN, + rotation: RotationLike = (0, 0, 0), + align: Union[None, Align, tuple[Align, Align, Align]] = ( + Align.CENTER, + Align.CENTER, + Align.MIN, + ), + mode: Mode = Mode.ADD, + ): + self.length = length + self.width = width + self.thickness = thickness + + # Create the basic shape + with BuildPart() as stud: + with BuildSketch(): + RectangleRounded(thickness, width, 0.25 * IN) + extrude(amount=length) + + # Create a Part object with appropriate alignment and rotation + super().__init__(part=stud.part, rotation=rotation, align=align, mode=mode) + + # Add joints to the ends of the stud + RigidJoint("end0", self, Location()) + RigidJoint("end1", self, Location((0, 0, length), (1, 0, 0), 180)) + + +class StudWall(Compound): + """StudWall + + A simple stud wall assembly with top and sole plates. + + Args: + length (float): wall length + depth (float, optional): stud width. Defaults to 3.5*IN. + height (float, optional): wall height. Defaults to 8*FT. + stud_spacing (float, optional): center-to-center. Defaults to 16*IN. + stud_thickness (float, optional): Defaults to 1.5*IN. + """ + + def __init__( + self, + length: float, + depth: float = 3.5 * IN, + height: float = 8 * FT, + stud_spacing: float = 16 * IN, + stud_thickness: float = 1.5 * IN, + ): + # Create the object that will be used for top and sole plates + plate = Stud( + length, + depth, + rotation=(0, -90, 0), + align=(Align.MIN, Align.CENTER, Align.MAX), + ) + # Define where studs will go on the plates + stud_locations = Pos(stud_thickness / 2, 0, stud_thickness) * GridLocations( + stud_spacing, 0, int(length / stud_spacing) + 1, 1, align=Align.MIN + ) + stud_locations.append(Pos(length - stud_thickness / 2, 0, stud_thickness)) + + # Create a single stud that will be copied for efficiency + stud = Stud(height - 2 * stud_thickness, depth, stud_thickness) + + # For efficiency studs in the walls are copies with their own position + studs = [] + for i, loc in enumerate(stud_locations): + stud_joint = RigidJoint(f"stud{i}", plate, loc) + stud_copy = copy.copy(stud) + stud_joint.connect_to(stud_copy.joints["end0"]) + studs.append(stud_copy) + top_plate = copy.copy(plate) + sole_plate = copy.copy(plate) + + # Position the top plate relative to the top of the first stud + studs[0].joints["end1"].connect_to(top_plate.joints["stud0"]) + + # Build the assembly of parts + super().__init__(children=[top_plate, sole_plate] + studs) + + # Add joints to the wall + RigidJoint("inside0", self, Location((depth / 2, depth / 2, 0), (0, 0, 1), 90)) + RigidJoint("end0", self, Location()) + + +x_wall = StudWall(13 * FT) +y_wall = StudWall(9 * FT) +x_wall.joints["inside0"].connect_to(y_wall.joints["end0"]) + +show(x_wall, y_wall, render_joints=False) +# [End]