 |
CLIP Score: 28.87
from AIDL import *
def lighthouse(
base_radius: float = 5 * inches,
tower_height: float = 20 * inches,
tower_radius: float = 3 * inches,
light_chamber_radius: float = 4 * inches,
light_chamber_height: float = 3 * inches,
roof_height: float = 2 * inches):
"""
Model a simple lighthouse with a base, tower, light chamber, and a roof.
"""
# Create the root Solid structure for the lighthouse
lighthouse = Solid()
# Define the base structure and its geometry
base = Solid()
base.base_circle = Circle((0, 0), base_radius)
lighthouse.base = base
# Define the tower structure and its geometry
tower = Solid(shift=(0, base_radius))
tower.body = Rectangle((0, 0), 2*tower_radius, tower_height)
lighthouse.tower = tower
# Define the light chamber structure and its geometry
light_chamber = Solid(shift=(0, tower_height/2))
light_chamber.chamber_circle = Circle((0, 0), light_chamber_radius)
light_chamber.chamber_height = Rectangle((0, 0), 2*light_chamber_radius, light_chamber_height)
lighthouse.light_chamber = light_chamber
# Define the roof structure and its geometry
roof = Solid(shift=(0, tower_height + light_chamber_height/2))
roof.roof_triangle = Triangle((0, 0), 2*light_chamber_radius, roof_height)
lighthouse.roof = roof
# Define the windows as drawings on the tower
windows = Drawing()
window_spacing = tower_height / 5
windows.window_shapes = [Rectangle((0, i * window_spacing), tower_radius/2, tower_radius) for i in range(1, 5)]
tower.windows = windows
return lighthouse
with AIDL_2D:
model = lighthouse()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a lighthouse
Absolutely, let's proceed with creating an AIDL program for a lighthouse. Let's break down the structure of the lighthouse first:
1. **Base:**
- Structure: Solid
- Geometry: Circle for the base.
2. **Tower:**
- Structure: Solid
- Geometry: A series of stacked circles or a single tall rectangle representing the body of the lighthouse.
3. **Light Chamber:**
- Structure: Solid
- Geometry: A circular structure at the top of the tower, representing the light chamber.
4. **Roof:**
- Structure: Solid
- Geometry: A triangle or polygon representing the roof on top of the light chamber.
5. **Windows:**
- Structure: Drawing
- Geometry: Rectangles or circles along the tower
Here's the Python DSL (AIDL) code for the lighthouse:
```python
from AIDL import *
def lighthouse(
base_radius: float = 5 * inches,
tower_height: float = 20 * inches,
tower_radius: float = 3 * inches,
light_chamber_radius: float = 4 * inches,
light_chamber_height: float = 3 * inches,
roof_height: float = 2 * inches):
"""
Model a simple lighthouse with a base, tower, light chamber, and a roof.
"""
# Create the root Solid structure for the lighthouse
lighthouse = Solid()
# Define the base structure and its geometry
base = Solid()
base.base_circle = Circle((0, 0), base_radius)
lighthouse.base = base
# Define the tower structure and its geometry
tower = Solid(shift=(0, base_radius))
tower.body = Rectangle((0, 0), 2*tower_radius, tower_height)
lighthouse.tower = tower
# Define the light chamber structure and its geometry
light_chamber = Solid(shift=(0, tower_height/2))
light_chamber.chamber_circle = Circle((0, 0), light_chamber_radius)
light_chamber.chamber_height = Rectangle((0, 0), 2*light_chamber_radius, light_chamber_height)
lighthouse.light_chamber = light_chamber
# Define the roof structure and its geometry
roof = Solid(shift=(0, tower_height + light_chamber_height/2))
roof.roof_triangle = Triangle((0, 0), 2*light_chamber_radius, roof_height)
lighthouse.roof = roof
# Define the windows as drawings on the tower
windows = Drawing()
window_spacing = tower_height / 5
windows.window_shapes = [Rectangle((0, i * window_spacing), tower_radius/2, tower_radius) for i in range(1, 5)]
tower.windows = windows
return lighthouse
with AIDL_2D:
model = lighthouse()
print(model.Solve())
model.Render()
```
This AIDL program defines a simple lighthouse with a solid base, tower, light chamber, and roof. The dimensions and positions of the structures are based on the provided parameters. The windows are added as drawings on the tower at regular intervals.
Feel free to adjust the dimensions and add additional detail as needed. Let me know if there's anything specific you want to change or add to this model!
|