 |
CLIP Score: 31.37
from AIDL import *
def stained_glass_window(
frame_width: float = 24*inch,
frame_height: float = 36*inch,
frame_thickness: float = 2*inch,
arch_height: float = 6*inch,
panel_spacing: float = 0.5*inch,
):
"""
Creates a simple stained glass window with a rectangular frame and a decorative arched top.
The window has several panels of glass arranged in a symmetric pattern.
"""
# Define overall structure
window = Solid()
frame = Solid()
arch = Hole()
panels = Solid()
window.frame = frame
window.arch = arch
window.panels = panels
# Frame geometry
frame.outer_bound = Rectangle((0, 0), frame_width, frame_height)
frame.inner_bound = Rectangle((0, 0), frame_width - 2*frame_thickness, frame_height - 2*frame_thickness)
# Arch geometry
arch.arc = Arc((0, frame_height/2), (frame_width/2, frame_height), (-frame_width/2, frame_height))
# Panel geometry (arrange in a grid pattern)
num_rows = 4
num_columns = 3
panel_width = (frame_width - (num_columns + 1) * panel_spacing) / num_columns
panel_height = (frame_height - (num_rows + 1) * panel_spacing - arch_height) / num_rows
panels.panels = []
for i in range(num_rows):
for j in range(num_columns):
x = -frame_width / 2 + panel_spacing + j * (panel_width + panel_spacing)
y = frame_height / 2 - panel_spacing - i * (panel_height + panel_spacing) - panel_height / 2
panel = Rectangle((x, y), panel_width, panel_height)
panels.panels.append(panel)
return window
with AIDL_2D:
model = stained_glass_window()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a stained glass window
Great idea! Let's create an AIDL program for a stained glass window. In order to proceed methodically, let's break this down into manageable steps.
1. Define the overall structure and hierarchical relationships of the window.
2. Define the constraints between the structures.
3. Define the geometry for each structure.
For simplicity, let's create a basic stained glass window with a frame and a few panels arranged in a symmetric pattern. We'll start with a rectangular window with a decorative arch at the top.
Let's get started!
### Step 1: Define the Overall Structure and Hierarchical Relationships
We'll define the overall structure first, focusing on the frame and panels. I'll use a frame (Solid) and multiple panels (Solid), and an arch (Hole) at the top.
```python
from AIDL import *
def stained_glass_window(
frame_width: float = 24*inch,
frame_height: float = 36*inch,
frame_thickness: float = 2*inch,
arch_height: float = 6*inch,
panel_spacing: float = 0.5*inch,
):
"""
Creates a simple stained glass window with a rectangular frame and a decorative arched top.
The window has several panels of glass arranged in a symmetric pattern.
"""
# Define overall structure
window = Solid()
frame = Solid()
arch = Hole()
panels = Solid()
window.frame = frame
window.arch = arch
window.panels = panels
return window
with AIDL_2D:
model = stained_glass_window()
print(model.Solve())
model.Render()
```
### Step 2: Define the Constraints Between the Structures
We'll add constraints to position and size the frame, arch, and panels correctly within the window.
```python
from AIDL import *
def stained_glass_window(
frame_width: float = 24*inch,
frame_height: float = 36*inch,
frame_thickness: float = 2*inch,
arch_height: float = 6*inch,
panel_spacing: float = 0.5*inch,
):
"""
Creates a simple stained glass window with a rectangular frame and a decorative arched top.
The window has several panels of glass arranged in a symmetric pattern.
"""
# Define overall structure
window = Solid()
frame = Solid()
arch = Hole()
panels = Solid()
window.frame = frame
window.arch = arch
window.panels = panels
# Add constraints for positioning and sizing
frame.AddConstraint(frame.bb.width == frame_width)
frame.AddConstraint(frame.bb.height == frame_height)
arch.AddConstraint(arch.bb.width == frame_width)
arch.AddConstraint(arch.bb.width == frame_height + arch_height)
return window
with AIDL_2D:
model = stained_glass_window()
print(model.Solve())
model.Render()
```
### Step 3: Define the Geometry for Each Structure
We'll define the rectangles for the frame and the panels, and an arc for the arch.
```python
from AIDL import *
def stained_glass_window(
frame_width: float = 24*inch,
frame_height: float = 36*inch,
frame_thickness: float = 2*inch,
arch_height: float = 6*inch,
panel_spacing: float = 0.5*inch,
):
"""
Creates a simple stained glass window with a rectangular frame and a decorative arched top.
The window has several panels of glass arranged in a symmetric pattern.
"""
# Define overall structure
window = Solid()
frame = Solid()
arch = Hole()
panels = Solid()
window.frame = frame
window.arch = arch
window.panels = panels
# Frame geometry
frame.outer_bound = Rectangle((0, 0), frame_width, frame_height)
frame.inner_bound = Rectangle((0, 0), frame_width - 2*frame_thickness, frame_height - 2*frame_thickness)
# Arch geometry
arch.arc = Arc((0, frame_height/2), (frame_width/2, frame_height), (-frame_width/2, frame_height))
# Panel geometry (arrange in a grid pattern)
num_rows = 4
num_columns = 3
panel_width = (frame_width - (num_columns + 1) * panel_spacing) / num_columns
panel_height = (frame_height - (num_rows + 1) * panel_spacing - arch_height) / num_rows
panels.panels = []
for i in range(num_rows):
for j in range(num_columns):
x = -frame_width / 2 + panel_spacing + j * (panel_width + panel_spacing)
y = frame_height / 2 - panel_spacing - i * (panel_height + panel_spacing) - panel_height / 2
panel = Rectangle((x, y), panel_width, panel_height)
panels.panels.append(panel)
return window
with AIDL_2D:
model = stained_glass_window()
print(model.Solve())
model.Render()
```
Let's check this step-by-step to make sure it generates the desired window and that all constraints and geometry are correct before adding any additional details or customization.
|