 |
CLIP Score: 32.51
from AIDL import *
def sunglasses(lens_radius: float = 1.5*inches, frame_width: float = 6*inches, frame_height: float = 1.75*inches):
"""
Models a pair of sunglasses with circular lenses, a rectangular frame, and simple arms.
"""
# Define the main structure
sunglasses = Solid()
# Define substructures for the left and right lenses, the frame, and the arms
left_lens = Solid(shift=(-lens_radius - 1*cm, 0))
right_lens = Solid(shift=(lens_radius + 1*cm, 0))
frame = Solid(shift=(0, 0))
nose_bridge = Solid(shift=(0, 0))
left_temple = Solid(shift=(-lens_radius - 1*cm - 3*inches, 0))
right_temple = Solid(shift=(lens_radius + 1*cm + 3*inches, 0))
# Attach these substructures to the main structure
sunglasses.left_lens = left_lens
sunglasses.right_lens = right_lens
sunglasses.frame = frame
sunglasses.nose_bridge = nose_bridge
sunglasses.left_temple = left_temple
sunglasses.right_temple = right_temple
# Define the geometry for each part
left_lens.disk = Circle((0, 0), lens_radius)
right_lens.disk = Circle((0, 0), lens_radius)
# The frame is a rounded rectangle that holds the lenses, and we'll add cutouts for the lenses
frame.outer = RoundedRectangle((0, 0), frame_width, frame_height, 0.25 * inches)
frame.left_lens_cutout = Hole()
frame.left_lens_cutout.disk = Circle((-lens_radius - 1*cm, 0), lens_radius)
frame.right_lens_cutout = Hole()
frame.right_lens_cutout.disk = Circle((lens_radius + 1*cm, 0), lens_radius)
# The nose bridge is a small rectangle between the lenses
nose_bridge.bridge = Rectangle((0, 0), 1 * cm, 0.5 * cm)
# Temple arms are simple rectangles extending from the frame sidepieces
left_temple.arm = Rectangle((0, 0), 0.5*cm, 4 * inches)
right_temple.arm = Rectangle((0, 0), 0.5*cm, 4 * inches)
return sunglasses
with AIDL_2D:
model = sunglasses()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a sunglasses
Sure! Let's start generating an AIDL program to create a model of sunglasses. Sunglasses typically consist of two lenses (left and right), a frame that holds the lenses, and possibly additional details like the nose bridge and the temple arms.
We'll proceed step-by-step to break down each part and create an AIDL program for them.
### Step 1: Define the overall structure of the sunglasses
We'll define the main structure and create substructures for different parts of the sunglasses:
1. Lenses (left and right)
2. Frame
3. Nose bridge
4. Temple arms (left and right)
Here's the start:
```python
from AIDL import *
def sunglasses(lens_radius: float = 1.5*inches, frame_width: float = 6*inches, frame_height: float = 1.75*inches):
"""
Models a pair of sunglasses with circular lenses, a rectangular frame, and simple arms.
"""
# Define the main structure
sunglasses = Solid()
# Define substructures for the left and right lenses, the frame, and the arms
left_lens = Solid(shift=(-lens_radius - 1*cm, 0))
right_lens = Solid(shift=(lens_radius + 1*cm, 0))
frame = Solid(shift=(0, 0))
nose_bridge = Solid(shift=(0, 0))
left_temple = Solid(shift=(-lens_radius - 1*cm - 3*inches, 0))
right_temple = Solid(shift=(lens_radius + 1*cm + 3*inches, 0))
# Attach these substructures to the main structure
sunglasses.left_lens = left_lens
sunglasses.right_lens = right_lens
sunglasses.frame = frame
sunglasses.nose_bridge = nose_bridge
sunglasses.left_temple = left_temple
sunglasses.right_temple = right_temple
# Define the geometry for each part
left_lens.disk = Circle((0, 0), lens_radius)
right_lens.disk = Circle((0, 0), lens_radius)
# The frame is a rounded rectangle that holds the lenses, and we'll add cutouts for the lenses
frame.outer = RoundedRectangle((0, 0), frame_width, frame_height, 0.25 * inches)
frame.left_lens_cutout = Hole()
frame.left_lens_cutout.disk = Circle((-lens_radius - 1*cm, 0), lens_radius)
frame.right_lens_cutout = Hole()
frame.right_lens_cutout.disk = Circle((lens_radius + 1*cm, 0), lens_radius)
# The nose bridge is a small rectangle between the lenses
nose_bridge.bridge = Rectangle((0, 0), 1 * cm, 0.5 * cm)
# Temple arms are simple rectangles extending from the frame sidepieces
left_temple.arm = Rectangle((0, 0), 0.5*cm, 4 * inches)
right_temple.arm = Rectangle((0, 0), 0.5*cm, 4 * inches)
return sunglasses
with AIDL_2D:
model = sunglasses()
print(model.Solve())
model.Render()
```
### Explanation:
1. **Main Structure**: The `sunglasses` Solid structure holds substructures: left and right lenses, frame, nose bridge, and temple arms.
2. **Lenses**: The lenses are simple circles.
3. **Frame**: The frame is a large rounded rectangle with cutouts (holes) for lenses.
4. **Nose Bridge**: The nose bridge is a small rectangle connecting the lenses.
5. **Temple Arms**: The temple arms are rectangles extending from the frame sides.
### Next Steps:
1. **Adjustable Parameters**: You may want to include parameters for things like the length of the temple arms, the width of the nose bridge, and how they are positioned.
2. **Additional Details**: You could add more details like embellishments on the frame or arms.
3. **Validation**: Ensure that the cutout size and positions work well with the lenses and overall design.
Let me know if you'd like to make any specific adjustments or enhancements!
|