From 6aaadd12a4cccc8b181144ce409d00623a82a312 Mon Sep 17 00:00:00 2001 From: gumyr Date: Sat, 31 May 2025 09:41:50 -0400 Subject: [PATCH] Adding example of making many holes --- docs/assets/examples/fast_grid_holes.png | Bin 0 -> 54056 bytes docs/examples_1.rst | 31 +++++++++++ examples/fast_grid_holes.py | 65 +++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 docs/assets/examples/fast_grid_holes.png create mode 100644 examples/fast_grid_holes.py diff --git a/docs/assets/examples/fast_grid_holes.png b/docs/assets/examples/fast_grid_holes.png new file mode 100644 index 0000000000000000000000000000000000000000..f402e154b9079e162fec5072bd00d4a4d9e6d70d GIT binary patch literal 54056 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 NJzf1=);T3K0RYYtnc4sV literal 0 HcmV?d00001 diff --git a/docs/examples_1.rst b/docs/examples_1.rst index 3de1337..364c2fb 100644 --- a/docs/examples_1.rst +++ b/docs/examples_1.rst @@ -49,6 +49,11 @@ Most of the examples show the builder and algebra modes. :link: clock_face :link-type: ref + .. grid-item-card:: Fast Grid Holes |Algebra| + :img-top: assets/examples/fast_grid_holes.png + :link: fast_grid_holes + :link-type: ref + .. grid-item-card:: Handle |Builder| |Algebra| :img-top: assets/examples/handle.png :link: handle @@ -325,6 +330,32 @@ a detailed and visually appealing clock design. :class:`~build_common.PolarLocations` are used to position features on the clock face. +.. _fast_grid_holes: + +Fast Grid Holes +--------------- +.. image:: assets/examples/fast_grid_holes.png + :align: center + +.. dropdown:: |Algebra| Reference Implementation (Algebra Mode) + + .. literalinclude:: ../examples/fast_grid_holes.py + :start-after: [Code] + :end-before: [End] + +This example demonstrates an efficient approach to creating a large number of holes +(625 in this case) in a planar part using build123d. + +Instead of modeling and subtracting 3D solids for each hole—which is computationally +expensive—this method constructs a 2D Face from an outer perimeter wire and a list of +hole wires. The entire face is then extruded in a single operation to form the final +3D object. This approach significantly reduces modeling time and complexity. + +The hexagonal hole pattern is generated using HexLocations, and each location is +populated with a hexagonal wire. These wires are passed directly to the Face constructor +as holes. On a typical Linux laptop, this script completes in approximately 1.02 seconds, +compared to substantially longer runtimes for boolean subtraction of individual holes in 3D. + .. _handle: diff --git a/examples/fast_grid_holes.py b/examples/fast_grid_holes.py new file mode 100644 index 0000000..1d6ca82 --- /dev/null +++ b/examples/fast_grid_holes.py @@ -0,0 +1,65 @@ +""" +A fast way to make many holes. + +name: fast_grid_holes.py +by: Gumyr +date: May 31, 2025 + +desc: + + This example demonstrates an efficient approach to creating a large number of holes + (625 in this case) in a planar part using build123d. + + Instead of modeling and subtracting 3D solids for each hole—which is computationally + expensive—this method constructs a 2D Face from an outer perimeter wire and a list of + hole wires. The entire face is then extruded in a single operation to form the final + 3D object. This approach significantly reduces modeling time and complexity. + + The hexagonal hole pattern is generated using HexLocations, and each location is + populated with a hexagonal wire. These wires are passed directly to the Face constructor + as holes. On a typical Linux laptop, this script completes in approximately 1.02 seconds, + compared to substantially longer runtimes for boolean subtraction of individual holes in 3D. + +license: + + Copyright 2025 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] +import timeit +from build123d import * +from ocp_vscode import show + +start_time = timeit.default_timer() + +# Calculate the locations of 625 holes +major_r = 10 +hole_locs = HexLocations(major_r, 25, 25) + +# Create wires for both the perimeter and all the holes +face_perimeter = Rectangle(500, 600).wire() +hex_hole = RegularPolygon(major_r - 1, 6, major_radius=True).wire() +holes = hole_locs * hex_hole + +# Create a new Face from the perimeter and hole wires +grid_pattern = Face(face_perimeter, holes) + +# Extrude to a 3D part +grid = extrude(grid_pattern, 1) + +print(f"Time: {timeit.default_timer() - start_time:0.3f}s") +show(grid) +# [End]