Fixing examples, PR #910

This commit is contained in:
gumyr 2025-02-22 10:55:46 -05:00
parent bc2c06ba52
commit aeb6b32b65
10 changed files with 83 additions and 67 deletions

View file

@ -41,7 +41,7 @@ l2 = Line(
(logo_width, -font_height * 0.1),
(logo_width, -ext_line_length - font_height * 0.1),
)
extension_lines = l1 + l2
extension_lines = Curve() + (l1 + l2)
extension_lines += Pos(*(l1 @ 0.5)) * arrow_left
extension_lines += (Pos(*(l2 @ 0.5)) * Rot(Z=180)) * arrow_left
extension_lines += Line(l1 @ 0.5, l1 @ 0.5 + Vector(dim_line_length, 0))

View file

@ -37,7 +37,7 @@ l2 = Line(
(logo_width, -font_height * 0.1),
(logo_width, -ext_line_length - font_height * 0.1),
)
extension_lines = l1 + l2
extension_lines = Curve() + (l1 + l2)
extension_lines += Pos(*(l1 @ 0.5)) * arrow_left
extension_lines += (Pos(*(l2 @ 0.5)) * Rot(Z=180)) * arrow_left
extension_lines += Line(l1 @ 0.5, l1 @ 0.5 + Vector(dim_line_length, 0))

View file

@ -33,7 +33,7 @@ class Spade(Sketch):
b1 = Bezier(b0 @ 1, (242, -72), (114, -168), (11, -105))
b2 = Bezier(b1 @ 1, (31, -174), (42, -179), (53, -198))
l0 = Line(b2 @ 1, (0, -198))
spade = l0 + b0 + b1 + b2
spade = b0 + b1 + b2 + l0
spade += mirror(spade, Plane.YZ)
spade = make_face(spade)
spade = scale(spade, height / spade.bounding_box().size.Y)

View file

@ -26,9 +26,11 @@ license:
See the License for the specific language governing permissions and
limitations under the License.
"""
from build123d import *
from ocp_vscode import *
from build123d import *
from ocp_vscode import show_object
GEN_DOCS = False
pip_count = 6
lego_unit_size = 8
@ -49,9 +51,10 @@ with BuildPart() as lego:
with BuildSketch() as plan:
# Start with a Rectangle the size of the block
perimeter = Rectangle(width=block_length, height=block_width)
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step4.svg")
if GEN_DOCS:
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step4.svg")
# Subtract an offset to create the block walls
offset(
perimeter,
@ -59,44 +62,51 @@ with BuildPart() as lego:
kind=Kind.INTERSECTION,
mode=Mode.SUBTRACT,
)
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step5.svg")
if GEN_DOCS:
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step5.svg")
# Add a grid of lengthwise and widthwise bars
with GridLocations(x_spacing=0, y_spacing=lego_unit_size, x_count=1, y_count=2):
Rectangle(width=block_length, height=ridge_width)
with GridLocations(lego_unit_size, 0, pip_count, 1):
Rectangle(width=ridge_width, height=block_width)
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step6.svg")
if GEN_DOCS:
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step6.svg")
# Substract a rectangle leaving ribs on the block walls
Rectangle(
block_length - 2 * (wall_thickness + ridge_depth),
block_width - 2 * (wall_thickness + ridge_depth),
mode=Mode.SUBTRACT,
)
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step7.svg")
if GEN_DOCS:
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step7.svg")
# Add a row of hollow circles to the center
with GridLocations(
x_spacing=lego_unit_size, y_spacing=0, x_count=pip_count - 1, y_count=1
):
Circle(radius=support_outer_diameter / 2)
Circle(radius=support_inner_diameter / 2, mode=Mode.SUBTRACT)
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step8.svg")
if GEN_DOCS:
exporter = ExportSVG(scale=6)
exporter.add_shape(plan.sketch)
exporter.write("assets/lego_step8.svg")
# Extrude this base sketch to the height of the walls
extrude(amount=base_height - wall_thickness)
visible, hidden = lego.part.project_to_viewport((-5, -30, 50))
exporter = ExportSVG(scale=6)
exporter.add_layer("Visible")
exporter.add_layer("Hidden", line_color=(99, 99, 99), line_type=LineType.ISO_DOT)
exporter.add_shape(visible, layer="Visible")
exporter.add_shape(hidden, layer="Hidden")
exporter.write("assets/lego_step9.svg")
if GEN_DOCS:
visible, hidden = lego.part.project_to_viewport((-5, -30, 50))
exporter = ExportSVG(scale=6)
exporter.add_layer("Visible")
exporter.add_layer(
"Hidden", line_color=(99, 99, 99), line_type=LineType.ISO_DOT
)
exporter.add_shape(visible, layer="Visible")
exporter.add_shape(hidden, layer="Hidden")
exporter.write("assets/lego_step9.svg")
# Create a box on the top of the walls
with Locations((0, 0, lego.vertices().sort_by(Axis.Z)[-1].Z)):
# Create the top of the block
@ -106,13 +116,16 @@ with BuildPart() as lego:
height=wall_thickness,
align=(Align.CENTER, Align.CENTER, Align.MIN),
)
visible, hidden = lego.part.project_to_viewport((-5, -30, 50))
exporter = ExportSVG(scale=6)
exporter.add_layer("Visible")
exporter.add_layer("Hidden", line_color=(99, 99, 99), line_type=LineType.ISO_DOT)
exporter.add_shape(visible, layer="Visible")
exporter.add_shape(hidden, layer="Hidden")
exporter.write("assets/lego_step10.svg")
if GEN_DOCS:
visible, hidden = lego.part.project_to_viewport((-5, -30, 50))
exporter = ExportSVG(scale=6)
exporter.add_layer("Visible")
exporter.add_layer(
"Hidden", line_color=(99, 99, 99), line_type=LineType.ISO_DOT
)
exporter.add_shape(visible, layer="Visible")
exporter.add_shape(hidden, layer="Hidden")
exporter.write("assets/lego_step10.svg")
# Create a workplane on the top of the block
with BuildPart(lego.faces().sort_by(Axis.Z)[-1]):
# Create a grid of pips
@ -122,14 +135,17 @@ with BuildPart() as lego:
height=pip_height,
align=(Align.CENTER, Align.CENTER, Align.MIN),
)
visible, hidden = lego.part.project_to_viewport((-100, -100, 50))
exporter = ExportSVG(scale=6)
exporter.add_layer("Visible")
exporter.add_layer("Hidden", line_color=(99, 99, 99), line_type=LineType.ISO_DOT)
exporter.add_shape(visible, layer="Visible")
exporter.add_shape(hidden, layer="Hidden")
exporter.write("assets/lego.svg")
if GEN_DOCS:
visible, hidden = lego.part.project_to_viewport((-100, -100, 50))
exporter = ExportSVG(scale=6)
exporter.add_layer("Visible")
exporter.add_layer(
"Hidden", line_color=(99, 99, 99), line_type=LineType.ISO_DOT
)
exporter.add_shape(visible, layer="Visible")
exporter.add_shape(hidden, layer="Hidden")
exporter.write("assets/lego.svg")
assert abs(lego.part.volume - 3212.187337781355) < 1e-3
show_object(lego.part.wrapped, name="lego")
show_object(lego.part, name="lego")

View file

@ -118,7 +118,7 @@ class PlatonicSolid(BasePartObject):
platonic_faces.append(Face(Wire.make_polygon(corner_vertices)))
# Create the solid from the Faces
platonic_solid = Solid.make_solid(Shell.make_shell(platonic_faces)).clean()
platonic_solid = Solid(Shell(platonic_faces)).clean()
# By definition, all vertices are the same distance from the origin so
# scale proportionally to this distance

View file

@ -37,7 +37,7 @@ projection_direction = Vector(0, 1, 0)
square = Face.make_rect(20, 20, Plane.ZX.offset(-80))
square_projected = square.project_to_shape(sphere, projection_direction)
square_solids = Compound([f.thicken(2) for f in square_projected])
square_solids = Compound([Solid.thicken(f, 2) for f in square_projected])
projection_beams = [
Solid.make_loft(
[
@ -75,7 +75,7 @@ text = Compound.make_text(
font_size=15,
align=(Align.MIN, Align.CENTER),
)
projected_text = sphere.project_faces(text, path=arch_path)
projected_text = Sketch(sphere.project_faces(text, path=arch_path))
# Example 1
show_object(sphere, name="sphere_solid", options={"alpha": 0.8})

View file

@ -9,7 +9,7 @@ projection_direction = Vector(0, 1, 0)
square = Plane.ZX.offset(-80) * Rectangle(20, 20)
square_projected = square.faces()[0].project_to_shape(sphere, projection_direction)
square_solids = Part() + [f.thicken(2) for f in square_projected]
square_solids = Part() + [Solid.thicken(f, 2) for f in square_projected]
face = square.faces()[0]
projection_beams = loft([face, Pos(0, 160, 0) * face])
@ -39,7 +39,7 @@ text = Text(
font_size=15,
align=(Align.MIN, Align.CENTER),
)
projected_text = sphere.project_faces(text.faces(), path=arch_path)
projected_text = Sketch(sphere.project_faces(text.faces(), path=arch_path))
# Example 1
show_object(sphere, name="sphere_solid", options={"alpha": 0.8})

View file

@ -1,4 +1,5 @@
from build123d import *
from ocp_vscode import show_object
powerup = Spline(
(0, 0, 0),
@ -10,11 +11,10 @@ powerup = Spline(
corner = RadiusArc(powerup @ 1, (100, 60, 0), -30)
screw = Helix(75, 150, 15, center=(75, 40, 15), direction=(-1, 0, 0))
roller_coaster = powerup + corner + screw
roller_coaster = Curve() + (powerup + corner + screw)
roller_coaster += Spline(corner @ 1, screw @ 0, tangents=(corner % 1, screw % 0))
roller_coaster += Spline(
screw @ 1, (-100, 30, 10), powerup @ 0, tangents=(screw % 1, powerup % 0)
)
if "show_object" in locals():
show_object(roller_coaster)
show_object(roller_coaster)