 |
CLIP Score: 30.24
from AIDL import *
def vintage_camera(body_width: float = 5 * inches,
body_height: float = 3 * inches,
body_thickness: float = 2 * inches,
lens_radius: float = 1 * inch,
viewfinder_width: float = 0.5 * inches,
viewfinder_height: float = 0.3 * inches,
advance_wheel_radius: float = 0.25 * inches,
shutter_button_radius: float = 0.15 * inches):
camera = Solid()
# Body of the camera
body = Solid()
body.geometry = Rectangle((0, 0), body_width, body_height)
camera.body = body
# Lens of the camera
lens = Solid(shift=(0, 0))
lens.geometry = Circle((0, 0), lens_radius)
camera.lens = lens
# Viewfinder of the camera
viewfinder = Solid(shift=(0, body_height / 2))
viewfinder.geometry = Rectangle((0, 0), viewfinder_width, viewfinder_height)
camera.viewfinder = viewfinder
# Film advance wheel on top
advance_wheel = Solid(shift=(-body_width / 2 + advance_wheel_radius, body_height / 2 + advance_wheel_radius))
advance_wheel.geometry = Circle((0, 0), advance_wheel_radius)
camera.advance_wheel = advance_wheel
# Shutter button on top
shutter_button = Solid(shift=(body_width / 2 - shutter_button_radius, body_height / 2 + shutter_button_radius))
shutter_button.geometry = Circle((0, 0), shutter_button_radius)
camera.shutter_button = shutter_button
# Details (decorative lines) on the body
details = Drawing()
details.lines = [
Line((-body_width / 2, 0), (body_width / 2, 0)),
Line((-body_width / 2, -body_height / 2), (body_width / 2, -body_height / 2)),
Line((-body_width / 2, body_height / 2), (body_width / 2, body_height / 2)),
Line((0, -body_height / 2), (0, body_height / 2)),
]
camera.details = details
# Constraints
camera.AddConstraint(lens.bb.vertical_center == body.bb.vertical_center)
camera.AddConstraint(viewfinder.bb.horizontal_center == body.bb.horizontal_center)
camera.AddConstraint(Horizontal(details.lines[0]))
camera.AddConstraint(Horizontal(details.lines[1]))
camera.AddConstraint(Horizontal(details.lines[2]))
camera.AddConstraint(Vertical(details.lines[3]))
return camera
with AIDL_2D:
model = vintage_camera()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a vintage camera
Sure! Let's walk through the process step-by-step to create a vintage camera using AIDL.
### Step 1: Define the Structure Hierarchy
First, identify the primary components of the vintage camera. A typical vintage camera might include:
1. **Body**: The main casing of the camera.
2. **Lens**: The circular lens in the front.
3. **Viewfinder**: A small square or rectangular window to look through.
4. **Film advance wheel**: A small rotating wheel on top to advance the film.
5. **Shutter button**: A small button to take the picture.
6. **Details**: Engraved details for added aesthetics.
I'll use Solid structures for the main body, lens, viewfinder, and additional components. I'll also use Drawing nodes to add decorative details.
Let's start by defining the structure hierarchy and constraints.
### Step 2: Define Constraints
We'll define constraints to position and size the various components relative to each other.
### Step 3: Define Geometry
Now we'll define the geometric primitives to give shape to each part of the camera.
Here is the complete AIDL program for generating a vintage camera:
```python
from AIDL import *
def vintage_camera(body_width: float = 5 * inches,
body_height: float = 3 * inches,
body_thickness: float = 2 * inches,
lens_radius: float = 1 * inch,
viewfinder_width: float = 0.5 * inches,
viewfinder_height: float = 0.3 * inches,
advance_wheel_radius: float = 0.25 * inches,
shutter_button_radius: float = 0.15 * inches):
camera = Solid()
# Body of the camera
body = Solid()
body.geometry = Rectangle((0, 0), body_width, body_height)
camera.body = body
# Lens of the camera
lens = Solid(shift=(0, 0))
lens.geometry = Circle((0, 0), lens_radius)
camera.lens = lens
# Viewfinder of the camera
viewfinder = Solid(shift=(0, body_height / 2))
viewfinder.geometry = Rectangle((0, 0), viewfinder_width, viewfinder_height)
camera.viewfinder = viewfinder
# Film advance wheel on top
advance_wheel = Solid(shift=(-body_width / 2 + advance_wheel_radius, body_height / 2 + advance_wheel_radius))
advance_wheel.geometry = Circle((0, 0), advance_wheel_radius)
camera.advance_wheel = advance_wheel
# Shutter button on top
shutter_button = Solid(shift=(body_width / 2 - shutter_button_radius, body_height / 2 + shutter_button_radius))
shutter_button.geometry = Circle((0, 0), shutter_button_radius)
camera.shutter_button = shutter_button
# Details (decorative lines) on the body
details = Drawing()
details.lines = [
Line((-body_width / 2, 0), (body_width / 2, 0)),
Line((-body_width / 2, -body_height / 2), (body_width / 2, -body_height / 2)),
Line((-body_width / 2, body_height / 2), (body_width / 2, body_height / 2)),
Line((0, -body_height / 2), (0, body_height / 2)),
]
camera.details = details
# Constraints
camera.AddConstraint(lens.bb.vertical_center == body.bb.vertical_center)
camera.AddConstraint(viewfinder.bb.horizontal_center == body.bb.horizontal_center)
camera.AddConstraint(Horizontal(details.lines[0]))
camera.AddConstraint(Horizontal(details.lines[1]))
camera.AddConstraint(Horizontal(details.lines[2]))
camera.AddConstraint(Vertical(details.lines[3]))
return camera
with AIDL_2D:
model = vintage_camera()
print(model.Solve())
model.Render()
```
### Explanation:
1. **Structure Hierarchy**: The camera consists of a body, lens, viewfinder, film advance wheel, shutter button, and decorative details.
2. **Constraints**: The lens and viewfinder are centered vertically and horizontally with respect to the body. Some horizontal and vertical lines are added as details.
3. **Geometry**: The body is a rectangle, the lens, advance wheel, and shutter button are circles, and the viewfinder is a rectangle. Decorative lines are added as details.
Feel free to adjust the dimensions and shifts as needed for your design!
|