 |
CLIP Score: 27.85
from AIDL import *
def stained_glass_window(
width: float = 24*inches,
height: float = 36*inches,
frame_width: float = 1*inches,
circle_radius: float = 5*inches,
star_radius: float = 3*inches,
star_points: int = 5
):
"""
Create a simple stained glass window model with a rectangular frame,
two circular glass pieces, and a central star pattern.
"""
# Define the main window frame as a solid since it will combine multiple parts
window = Solid()
frame = Solid()
glass_circle1 = Solid()
glass_circle2 = Solid()
star_region = Solid()
window.frame = frame
window.glass_circle1 = glass_circle1
window.glass_circle2 = glass_circle2
window.star_region = star_region
# Define the frame geometry
frame.outer_rect = Rectangle((0, 0), width, height)
frame.inner_rect = Rectangle((0, 0), width - 2*frame_width, height - 2*frame_width)
# Define the circular glass pieces
glass_circle1.glass_piece = Circle((-width/4, 0), circle_radius)
glass_circle2.glass_piece = Circle((width/4, 0), circle_radius)
# Define the central star pattern geometry
angle_increment = 360 / (2 * star_points)
star_points_list = []
for i in range(2 * star_points):
angle_deg = i * angle_increment
angle_rad = radians(angle_deg)
length = star_radius if i % 2 == 0 else star_radius / 2
star_points_list.append(Point((length * cos(angle_rad), length * sin(angle_rad))))
for i in range(len(star_points_list)):
start_point = star_points_list[i]
end_point = star_points_list[(i + 1) % len(star_points_list)]
star_region.__setattr__(f"edge_{i}", Line(start_point, end_point))
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
Creating a stained glass window involves designing a framework with multiple contour-filled regions that would represent different colored glass pieces. Since stained glass windows are mostly decorative, they often contain intricate patterns and designs. In this AIDL program, we will create a simple example of a stained glass window with a few geometric patterns.
Let's construct a stained glass window with the following elements:
- A rectangular frame as the outer boundary.
- Two circular solid sections representing two different colored glass pieces.
- A central region with a star pattern.
Here's how the AIDL program could look:
```python
from AIDL import *
def stained_glass_window(
width: float = 24*inches,
height: float = 36*inches,
frame_width: float = 1*inches,
circle_radius: float = 5*inches,
star_radius: float = 3*inches,
star_points: int = 5
):
"""
Create a simple stained glass window model with a rectangular frame,
two circular glass pieces, and a central star pattern.
"""
# Define the main window frame as an assembly since it will combine multiple parts
window = Solid()
frame = Solid()
glass_circles = [Solid(), Solid()]
star_region = Solid()
window.frame = frame
window.glass_circles = glass_circles
window.star_region = star_region
# Define the frame geometry
frame.outer_rect = Rectangle((0, 0), width, height)
frame.inner_rect = Rectangle((0, 0), width - 2*frame_width, height - 2*frame_width)
# Define the circular glass pieces
glass_circles[0].glass_piece = Circle((-width/4, 0), circle_radius)
glass_circles[1].glass_piece = Circle((width/4, 0), circle_radius)
# Define the central star pattern
angle_increment = 360 / (2 * star_points)
star_points_list = []
for i in range(2 * star_points):
angle_deg = i * angle_increment
angle_rad = radians(angle_deg)
length = star_radius if i % 2 == 0 else star_radius / 2
star_points_list.append(Point((length * cos(angle_rad), length * sin(angle_rad))))
for i in range(len(star_points_list)):
star_region.add_edge(Line(star_points_list[i], star_points_list[(i + 1) % len(star_points_list)]))
# Define holes for the frame
frame.add_edge(frame.inner_rect.top)
frame.add_edge(frame.inner_rect.bottom)
frame.add_edge(frame.inner_rect.left)
frame.add_edge(frame.inner_rect.right)
# Combine glass circles and star region geometries
window.glass_pieces = [glass_circles[0].glass_piece, glass_circles[1].glass_piece] + star_region.edges
return window
with AIDL_2D:
model = stained_glass_window()
print(model.Solve())
model.Render()
```
### Explanation:
- **Frame Structure**: We create a frame as a solid structure with a larger outer rectangle and a smaller inner rectangle to represent the wooden or metal frame of the window. The area between these rectangles forms the actual frame.
- **Glass Circles**: We add two circular solid structures to represent different colored glass pieces.
- **Star Pattern**: A star pattern is created using lines connected between calculated points to form a star.
- **Combining Elements**: The frame rectangles and the glass circles are integrated into the `window` structure, each as solids.
You can customize this design further by adding more complex patterns or additional elements. If you'd like to modify any part of this design or add more intricate details, feel free to specify, and we'll adjust accordingly!
Traceback (most recent call last):
File "/net/projects/ranalab/jz/aidl/AIDL/generation/backend.py", line 21, in dumbrun
exec(code, env)
File "", line 58, in
File "", line 44, in stained_glass_window
File "/net/projects/ranalab/jz/aidl/AIDL/structure.py", line 1242, in __getattr__
return self.bb.__getattribute__(name)
AttributeError: 'BoundingBox' object has no attribute 'add_edge'
I apologize for the error. It seems there was a misunderstanding regarding how to add edges to the structure. Let's simplify by adding basic geometric shapes and fixing the correct way to add them.
Here's the revised code for your stained glass window:
```python
from AIDL import *
def stained_glass_window(
width: float = 24*inches,
height: float = 36*inches,
frame_width: float = 1*inches,
circle_radius: float = 5*inches,
star_radius: float = 3*inches,
star_points: int = 5
):
"""
Create a simple stained glass window model with a rectangular frame,
two circular glass pieces, and a central star pattern.
"""
# Define the main window frame as a solid since it will combine multiple parts
window = Solid()
frame = Solid()
glass_circle1 = Solid()
glass_circle2 = Solid()
star_region = Solid()
window.frame = frame
window.glass_circle1 = glass_circle1
window.glass_circle2 = glass_circle2
window.star_region = star_region
# Define the frame geometry
frame.outer_rect = Rectangle((0, 0), width, height)
frame.inner_rect = Rectangle((0, 0), width - 2*frame_width, height - 2*frame_width)
# Define the circular glass pieces
glass_circle1.glass_piece = Circle((-width/4, 0), circle_radius)
glass_circle2.glass_piece = Circle((width/4, 0), circle_radius)
# Define the central star pattern geometry
angle_increment = 360 / (2 * star_points)
star_points_list = []
for i in range(2 * star_points):
angle_deg = i * angle_increment
angle_rad = radians(angle_deg)
length = star_radius if i % 2 == 0 else star_radius / 2
star_points_list.append(Point((length * cos(angle_rad), length * sin(angle_rad))))
for i in range(len(star_points_list)):
start_point = star_points_list[i]
end_point = star_points_list[(i + 1) % len(star_points_list)]
star_region.__setattr__(f"edge_{i}", Line(start_point, end_point))
return window
with AIDL_2D:
model = stained_glass_window()
print(model.Solve())
model.Render()
```
### Explanation of Changes:
- **`star_region` geometry**: Instead of using `add_edge`, we assign `Line` objects directly to the `star_region`.
- **Naming Lines**: Each line in the star pattern is named `edge_0`, `edge_1`, etc., to ensure they are added correctly to the `star_region`.
This setup should resolve the issue and correctly build the stained glass window's frame, glass circles, and central star pattern. Please run this revised code and let me know if there are any issues.
|