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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

m$=_Ku{qkR*bIWJGzg_x!;?kWV-S@Wa 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 literal 0 HcmV?d00001 diff --git a/docs/examples_1.rst b/docs/examples_1.rst index dccb122..1607490 100644 --- a/docs/examples_1.rst +++ b/docs/examples_1.rst @@ -8,7 +8,7 @@ The build123d Examples Overview -------------------------------- -In the GitHub repository you will find an `examples folder `_ +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 0000000..792bdef --- /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 0000000..c38725c --- /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]