 |
CLIP Score: 24.31
from AIDL import *
def lighthouse(
base_radius: float = 2 * inches,
tower_height: float = 10 * inches,
tower_top_radius: float = 1 * inch,
balcony_radius: float = 1.5 * inches,
lantern_radius: float = 1 * inch,
lantern_height: float = 1 * inch
):
"""
Model a simple lighthouse with a circular base, a tapered tower, a balcony, and a lantern room at the top.
"""
lighthouse = Solid()
# Base of the lighthouse
base = Solid()
lighthouse.base = base
base.disk = Circle((0, 0), base_radius)
# Tower of the lighthouse
tower = Solid(shift=(0, base_radius))
lighthouse.tower = tower
tower.bottom_circle = Circle((0, 0), base_radius)
tower.top_circle = Circle((0, tower_height), tower_top_radius)
tower.side = Line(tower.bottom_circle.center, tower.top_circle.center)
# Balcony near the top of the tower
balcony = Solid(shift=(0, base_radius + tower_height))
lighthouse.balcony = balcony
balcony.outer_ring = Circle((0, 0), balcony_radius)
balcony.inner_ring = Hole()
balcony.inner_ring.disk = Circle((0, 0), tower_top_radius)
# Lantern Room at the top of the tower
lantern = Solid(shift=(0, base_radius + tower_height + balcony_radius))
lighthouse.lantern = lantern
lantern.outer_circle = Circle((0, 0), lantern_radius)
lantern.inner_circle = Hole()
lantern.inner_circle.disk = Circle((0, 0), tower_top_radius)
# Lantern details - we'll add some windows for simplicity
lantern.windows = []
num_windows = 8
window_width = 0.3 * inches
window_height = 0.4 * inches
for i in range(num_windows):
angle = i * 360 / num_windows
lantern.windows.append(
Rectangle(center=(lantern_radius * 0.6 * cos(radians(angle)), lantern_radius * 0.6 * sin(radians(angle))), width=window_width, height=window_height)
)
return lighthouse
with AIDL_2D:
model = lighthouse()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a lighthouse
Sure! Let's design a simple lighthouse. Here are some features we could include in our lighthouse model:
1. **Base**: A circular base to provide stability.
2. **Tower**: A tall, tapered cylindrical tower representing the main structure of the lighthouse.
3. **Balcony**: A ring-shaped platform near the top of the tower.
4. **Lantern Room**: A small structure at the top of the tower where the light is housed; we'll include little windows as the light's emitters.
We'll use the various AIDL structures and geometry types we've discussed to create this model.
Here is the AIDL program for a lighthouse:
```python
from AIDL import *
def lighthouse(
base_radius: float = 2 * inches,
tower_height: float = 10 * inches,
tower_top_radius: float = 1 * inch,
balcony_radius: float = 1.5 * inches,
lantern_radius: float = 1 * inch,
lantern_height: float = 1 * inch
):
"""
Model a simple lighthouse with a circular base, a tapered tower, a balcony, and a lantern room at the top.
"""
lighthouse = Solid()
# Base of the lighthouse
base = Solid()
lighthouse.base = base
base.disk = Circle((0, 0), base_radius)
# Tower of the lighthouse
tower = Solid(shift=(0, base_radius))
lighthouse.tower = tower
tower.bottom_circle = Circle((0, 0), base_radius)
tower.top_circle = Circle((0, tower_height), tower_top_radius)
tower.side = Line(tower.bottom_circle.center, tower.top_circle.center)
# Balcony near the top of the tower
balcony = Solid(shift=(0, base_radius + tower_height))
lighthouse.balcony = balcony
balcony.outer_ring = Circle((0, 0), balcony_radius)
balcony.inner_ring = Hole()
balcony.inner_ring.disk = Circle((0, 0), tower_top_radius)
# Lantern Room at the top of the tower
lantern = Solid(shift=(0, base_radius + tower_height + balcony_radius))
lighthouse.lantern = lantern
lantern.outer_circle = Circle((0, 0), lantern_radius)
lantern.inner_circle = Hole()
lantern.inner_circle.disk = Circle((0, 0), tower_top_radius)
# Lantern details - we'll add some windows for simplicity
lantern.windows = []
num_windows = 8
window_width = 0.3 * inches
window_height = 0.4 * inches
for i in range(num_windows):
angle = i * 360 / num_windows
lantern.windows.append(
Rectangle(center=(lantern_radius * 0.6 * cos(radians(angle)), lantern_radius * 0.6 * sin(radians(angle))), width=window_width, height=window_height)
)
return lighthouse
with AIDL_2D:
model = lighthouse()
print(model.Solve())
model.Render()
```
Let's break down the program:
1. We define some parameters for different parts of the lighthouse, such as the base radius and tower height.
2. We create the main `Solid` structure called `lighthouse`.
3. We add a `Solid` base with a circular disk.
4. We create a tower that's tapered from the base radius to a smaller top radius.
5. We add a `Solid` balcony near the top of the tower, with an outer ring and a hole in the middle.
6. We create a `Solid` lantern room at the very top, with an outer circle and a hole in the middle.
7. We add some windows to the lantern room to represent the light emitters.
8. We solve and render the model.
This model gives a simplified representation of a lighthouse suitable for laser cutting. Feel free to customize any of the parameters or add more details to the lighthouse to better fit your needs!
|