mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-05 18:20:46 -08:00
Added import_stl example
This commit is contained in:
parent
66fe3b5e14
commit
55b6119104
2 changed files with 75 additions and 0 deletions
75
examples/benchy.py
Normal file
75
examples/benchy.py
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
"""
|
||||
STL import and edit example
|
||||
|
||||
name: benchy.py
|
||||
by: Gumyr
|
||||
date: July 9, 2023
|
||||
|
||||
desc:
|
||||
This example imports a STL model as a Solid object and changes it.
|
||||
The low-poly-benchy used in this example is by reddaugherty, see
|
||||
https://www.printables.com/model/151134-low-poly-benchy.
|
||||
|
||||
license:
|
||||
|
||||
Copyright 2023 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 *
|
||||
|
||||
with BuildPart() as benchy:
|
||||
# Import the benchy as a Solid model and add it
|
||||
add(import_stl("low_poly_benchy.stl", for_reference=False))
|
||||
|
||||
# Determine the plane that defines the top of the roof
|
||||
vertices = benchy.vertices()
|
||||
roof_vertices = vertices.filter_by_position(Axis.Z, 38, 42)
|
||||
roof_plane_vertices = [
|
||||
roof_vertices.group_by(Axis.Y, tol_digits=2)[-1].sort_by(Axis.X)[0],
|
||||
roof_vertices.sort_by(Axis.Z)[0],
|
||||
roof_vertices.group_by(Axis.Y, tol_digits=2)[0].sort_by(Axis.X)[0],
|
||||
]
|
||||
roof_plane = Plane(
|
||||
Face.make_from_wires(
|
||||
Wire.make_polygon([v.to_tuple() for v in roof_plane_vertices])
|
||||
)
|
||||
)
|
||||
# Remove the faceted smoke stack
|
||||
split(bisect_by=roof_plane, keep=Keep.BOTTOM)
|
||||
|
||||
# Determine the position and size of the smoke stack
|
||||
smoke_stack_vertices = vertices.group_by(Axis.Z, tol_digits=0)[-1]
|
||||
smoke_stack_center = sum(
|
||||
[Vector(v.X, v.Y, v.Z) for v in smoke_stack_vertices], Vector()
|
||||
) * (1 / len(smoke_stack_vertices))
|
||||
smoke_stack_radius = max(
|
||||
[
|
||||
(Vector(*v.to_tuple()) - smoke_stack_center).length
|
||||
for v in smoke_stack_vertices
|
||||
]
|
||||
)
|
||||
|
||||
# Create the new smoke stack
|
||||
with BuildSketch(Plane(smoke_stack_center)):
|
||||
Circle(smoke_stack_radius)
|
||||
Circle(smoke_stack_radius - 2 * MM, mode=Mode.SUBTRACT)
|
||||
extrude(amount=-3 * MM)
|
||||
with BuildSketch(Plane(smoke_stack_center)):
|
||||
Circle(smoke_stack_radius - 0.5 * MM)
|
||||
Circle(smoke_stack_radius - 2 * MM, mode=Mode.SUBTRACT)
|
||||
extrude(amount=roof_plane_vertices[1].Z - smoke_stack_center.Z)
|
||||
|
||||
show(benchy)
|
||||
BIN
examples/low_poly_benchy.stl
Normal file
BIN
examples/low_poly_benchy.stl
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue