mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
121 lines
No EOL
3.8 KiB
Python
121 lines
No EOL
3.8 KiB
Python
"""
|
|
name: "build_123d_logo.py"
|
|
title: "Former build123d Logo"
|
|
authors: "Gumyr"
|
|
license: "http://www.apache.org/licenses/LICENSE-2.0"
|
|
created: "2022-08-05"
|
|
modified: "2023-07-31"
|
|
|
|
description: |
|
|
This example creates the former build123d logo (new logo was created in the end of 2023).
|
|
|
|
Using text and lines to create the first build123d logo.
|
|
The builder mode example also generates the SVG file `logo.svg`.
|
|
|
|
has_builder_mode: true
|
|
has_algebra_mode: true
|
|
image_files:
|
|
- "example_build123d_logo_01.png"
|
|
"""
|
|
# [Imports]
|
|
from build123d import *
|
|
from build123d import Shape
|
|
from ocp_vscode import *
|
|
|
|
# [Parameters]
|
|
# - none
|
|
|
|
# [Code]
|
|
with BuildSketch() as logo_text:
|
|
Text("123d", font_size=10, align=(Align.MIN, Align.MIN))
|
|
font_height = logo_text.vertices().sort_by(Axis.Y)[-1].Y
|
|
|
|
with BuildSketch() as build_text:
|
|
Text("build", font_size=5, align=(Align.CENTER, Align.CENTER))
|
|
build_bb = bounding_box(build_text.sketch, mode=Mode.PRIVATE)
|
|
build_vertices = build_bb.vertices().sort_by(Axis.X)
|
|
build_width = build_vertices[-1].X - build_vertices[0].X
|
|
|
|
with BuildLine() as one:
|
|
l1 = Line((font_height * 0.3, 0), (font_height * 0.3, font_height))
|
|
TangentArc(l1 @ 1, (0, font_height * 0.7), tangent=(l1 % 1) * -1)
|
|
|
|
with BuildSketch() as two:
|
|
with Locations((font_height * 0.35, 0)):
|
|
Text("2", font_size=10, align=(Align.MIN, Align.MIN))
|
|
|
|
with BuildPart() as three_d:
|
|
with BuildSketch(Plane((font_height * 1.1, 0))):
|
|
Text("3d", font_size=10, align=(Align.MIN, Align.MIN))
|
|
extrude(amount=font_height * 0.3)
|
|
logo_width = three_d.vertices().sort_by(Axis.X)[-1].X
|
|
|
|
with BuildLine() as arrow_left:
|
|
t1 = TangentArc((0, 0), (1, 0.75), tangent=(1, 0))
|
|
mirror(t1, Plane.XZ)
|
|
|
|
ext_line_length = font_height * 0.5
|
|
dim_line_length = (logo_width - build_width - 2 * font_height * 0.05) / 2
|
|
with BuildLine() as extension_lines:
|
|
l1 = Line((0, -font_height * 0.1), (0, -ext_line_length - font_height * 0.1))
|
|
l2 = Line(
|
|
(logo_width, -font_height * 0.1),
|
|
(logo_width, -ext_line_length - font_height * 0.1),
|
|
)
|
|
with Locations(l1 @ 0.5):
|
|
add(arrow_left.line)
|
|
with Locations(l2 @ 0.5):
|
|
add(arrow_left.line, rotation=180.0)
|
|
Line(l1 @ 0.5, l1 @ 0.5 + Vector(dim_line_length, 0))
|
|
Line(l2 @ 0.5, l2 @ 0.5 - Vector(dim_line_length, 0))
|
|
|
|
# Precisely center the build Faces
|
|
with BuildSketch() as build:
|
|
with Locations(
|
|
(l1 @ 0.5 + l2 @ 0.5) / 2
|
|
- Vector((build_vertices[-1].X + build_vertices[0].X) / 2, 0)
|
|
):
|
|
add(build_text.sketch)
|
|
|
|
|
|
if True:
|
|
logo = Compound(
|
|
children=[
|
|
one.line,
|
|
two.sketch,
|
|
three_d.part,
|
|
extension_lines.line,
|
|
build.sketch,
|
|
]
|
|
)
|
|
|
|
# logo.export_step("logo.step")
|
|
def add_svg_shape(svg: ExportSVG, shape: Shape, color: tuple[float, float, float]):
|
|
global counter
|
|
try:
|
|
counter += 1
|
|
except:
|
|
counter = 1
|
|
|
|
visible, _hidden = shape.project_to_viewport(
|
|
(-5, 1, 10), viewport_up=(0, 1, 0), look_at=(0, 0, 0)
|
|
)
|
|
if color is not None:
|
|
svg.add_layer(str(counter), fill_color=color, line_weight=1)
|
|
else:
|
|
svg.add_layer(str(counter), line_weight=1)
|
|
svg.add_shape(visible, layer=str(counter))
|
|
|
|
svg = ExportSVG(scale=20)
|
|
add_svg_shape(svg, logo, None)
|
|
# add_svg_shape(svg, Compound(children=[one.line, extension_lines.line]), None)
|
|
# add_svg_shape(svg, Compound(children=[two.sketch, build.sketch]), (170, 204, 255))
|
|
# add_svg_shape(svg, three_d.part, (85, 153, 255))
|
|
svg.write("logo.svg")
|
|
|
|
show_object(one, name="one")
|
|
show_object(two, name="two")
|
|
show_object(three_d, name="three_d")
|
|
show_object(extension_lines, name="extension_lines")
|
|
show_object(build, name="build")
|
|
# [End] |