mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
"""
|
|
Supermarine Spitfire Wing
|
|
"""
|
|
|
|
# [Code]
|
|
|
|
from build123d import *
|
|
from ocp_vscode import show
|
|
|
|
wing_span = 36 * FT + 10 * IN
|
|
wing_leading = 2.5 * FT
|
|
wing_trailing = wing_span / 4 - wing_leading
|
|
wing_leading_fraction = wing_leading / (wing_leading + wing_trailing)
|
|
wing_tip_section = wing_span / 2 - 1 * IN # distance from root to last section
|
|
|
|
# Create leading and trailing edges
|
|
leading_edge = EllipticalCenterArc(
|
|
(0, 0), wing_span / 2, wing_leading, start_angle=270, end_angle=360
|
|
)
|
|
trailing_edge = EllipticalCenterArc(
|
|
(0, 0), wing_span / 2, wing_trailing, start_angle=0, end_angle=90
|
|
)
|
|
|
|
# [AirfoilSizes]
|
|
# Calculate the airfoil sizes from the leading/trailing edges
|
|
airfoil_sizes = []
|
|
for i in [0, 1]:
|
|
tip_axis = Axis(i * (wing_tip_section, 0, 0), (0, 1, 0))
|
|
leading_pnt = leading_edge.intersect(tip_axis)[0]
|
|
trailing_pnt = trailing_edge.intersect(tip_axis)[0]
|
|
airfoil_sizes.append(trailing_pnt.Y - leading_pnt.Y)
|
|
|
|
# [Airfoils]
|
|
# Create the root and tip airfoils - note that they are different NACA profiles
|
|
airfoil_root = Plane.YZ * scale(
|
|
Airfoil("2213").translate((-wing_leading_fraction, 0, 0)), airfoil_sizes[0]
|
|
)
|
|
airfoil_tip = (
|
|
Plane.YZ
|
|
* Pos(Z=wing_tip_section)
|
|
* scale(Airfoil("2205").translate((-wing_leading_fraction, 0, 0)), airfoil_sizes[1])
|
|
)
|
|
|
|
# [Profiles]
|
|
# Create the Gordon surface profiles and guides
|
|
profiles = airfoil_root.edges() + airfoil_tip.edges()
|
|
profiles.append(leading_edge @ 1) # wing tip
|
|
guides = [leading_edge, trailing_edge]
|
|
# Create the wing surface as a Gordon Surface
|
|
wing_surface = -Face.make_gordon_surface(profiles, guides)
|
|
# Create the root of the wing
|
|
wing_root = -Face(Wire(wing_surface.edges().filter_by(Edge.is_closed)))
|
|
|
|
# [Solid]
|
|
# Create the wing Solid
|
|
wing = Solid(Shell([wing_surface, wing_root]))
|
|
wing.color = 0x99A3B9 # Azure Blue
|
|
|
|
show(wing)
|
|
# [End]
|
|
# Documentation artifact generation
|
|
# wing_control_edges = Curve(
|
|
# [airfoil_root, airfoil_tip, Vertex(leading_edge @ 1), leading_edge, trailing_edge]
|
|
# )
|
|
# visible, _ = wing_control_edges.project_to_viewport((50 * FT, -50 * FT, 50 * FT))
|
|
# max_dimension = max(*Compound(children=visible).bounding_box().size)
|
|
# svg = ExportSVG(scale=100 / max_dimension)
|
|
# svg.add_shape(visible)
|
|
# svg.write("assets/surface_modeling/spitfire_wing_profiles_guides.svg")
|
|
|
|
# export_gltf(
|
|
# wing,
|
|
# "assets/surface_modeling/spitfire_wing.glb",
|
|
# binary=True,
|
|
# linear_deflection=0.1,
|
|
# angular_deflection=1,
|
|
# )
|