 |
CLIP Score: 35.9
from AIDL import *
def cabinet_with_opposite_drawers(
cabinet_width: float = 24 * inches,
cabinet_height: float = 36 * inches,
drawer_height: float = 6 * inches,
handle_width: float = 3 * inches,
handle_height: float = 1 * inches,
num_drawers: int = 5
):
"""
Constructs a side view of a cabinet with drawers alternating in opposite directions.
"""
# Main cabinet structure
cabinet = Solid()
# Cabinet body
cabinet.body = Rectangle((0, cabinet_height / 2), cabinet_width, cabinet_height)
# Individual drawers
for i in range(num_drawers):
drawer = Solid(shift=(0, cabinet_height / 2 - (i * drawer_height + drawer_height / 2)))
drawer.body = Rectangle((0, 0), cabinet_width, drawer_height)
handle_x_shift = -cabinet_width / 2 + handle_width / 2 + 0.5 * inches if i % 2 == 0 else cabinet_width / 2 - handle_width / 2 - 0.5 * inches
drawer.handle = Drawing(shift=(handle_x_shift, 0))
drawer.handle.shape = Rectangle((0, 0), handle_width, handle_height)
if i % 2 == 0: # Drawers on the left side
setattr(cabinet, f'drawer_left_{i}', drawer)
else: # Drawers on the right side
setattr(cabinet, f'drawer_right_{i}', drawer)
return cabinet
with AIDL_2D:
model = cabinet_with_opposite_drawers()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a side view of cabinet with drawers in opposite directions
Sure! Let's start by understanding the requirements:
1. **Cabinet Body**: A rectangular solid representing the main body of the cabinet.
2. **Drawers**:
- There will be multiple drawers oriented in opposite directions.
- Each drawer can be a rectangular solid with a handle as a drawing detail.
Let's assume the following parameters for simplicity and clarity:
- **Cabinet Dimensions**: width and height.
- **Drawer Dimensions**: drawer height (assuming all drawers have the same height).
- **Number of Drawers**: Total drawers, alternating their direction.
- **Handle Position and Size**: Position and size for the handle drawing.
Here’s an AIDL program to generate such a cabinet:
```python
from AIDL import *
def cabinet_with_opposite_drawers(
cabinet_width: float = 24 * inches,
cabinet_height: float = 36 * inches,
drawer_height: float = 6 * inches,
handle_width: float = 3 * inches,
handle_height: float = 1 * inches,
num_drawers: int = 5
):
"""
Constructs a side view of a cabinet with drawers alternating in opposite directions.
"""
# Main cabinet structure
cabinet = Solid()
# Cabinet body
cabinet.body = Rectangle((0, cabinet_height / 2), cabinet_width, cabinet_height)
# Individual drawers
for i in range(num_drawers):
drawer = Solid(shift=(0, cabinet_height / 2 - (i * drawer_height + drawer_height / 2)))
drawer.body = Rectangle((0, 0), cabinet_width, drawer_height)
handle_x_shift = -cabinet_width / 2 + handle_width + 0.5 * inches if i % 2 == 0 else cabinet_width / 2 - handle_width - 0.5 * inches
drawer.handle = Drawing(shift=(handle_x_shift, 0))
drawer.handle.shape = Rectangle((0, 0), handle_width, handle_height)
if i % 2 == 0: # Drawers on the left side
cabinet[f'drawer_left_{i}'] = drawer
else: # Drawers on the right side
cabinet[f'drawer_right_{i}'] = drawer
return cabinet
with AIDL_2D:
model = cabinet_with_opposite_drawers()
print(model.Solve())
model.Render()
```
### Explanation:
1. **Cabinet Structure**:
- Created a main **Solid** structure for the cabinet.
- Defined the cabinet body as a rectangle.
2. **Drawers**:
- Looped through the number of drawers to define each drawer.
- Positioned each drawer with a vertical shift based on its index.
- Added a handle with a positional shift on either the left or right, depending on the drawer index (even/odd).
### Parameters:
- Cabinet width, height, drawer height, handle dimensions, and the number of drawers can all be adjusted via function inputs.
If any part of this does not meet your requirements or needs further adjustment, please let me know!
Traceback (most recent call last):
File "/net/projects/ranalab/jz/aidl/AIDL/generation/backend.py", line 21, in dumbrun
exec(code, env)
File "", line 38, in
File "", line 31, in cabinet_with_opposite_drawers
TypeError: 'Solid' object does not support item assignment
It looks like item assignment for `Solid` objects should be used via attributes rather than dictionary-like item assignment. Each drawer must be assigned using attribute assignment instead of brackets. I'll correct the assignment in the loop.
Here is the corrected program:
```python
from AIDL import *
def cabinet_with_opposite_drawers(
cabinet_width: float = 24 * inches,
cabinet_height: float = 36 * inches,
drawer_height: float = 6 * inches,
handle_width: float = 3 * inches,
handle_height: float = 1 * inches,
num_drawers: int = 5
):
"""
Constructs a side view of a cabinet with drawers alternating in opposite directions.
"""
# Main cabinet structure
cabinet = Solid()
# Cabinet body
cabinet.body = Rectangle((0, cabinet_height / 2), cabinet_width, cabinet_height)
# Individual drawers
for i in range(num_drawers):
drawer = Solid(shift=(0, cabinet_height / 2 - (i * drawer_height + drawer_height / 2)))
drawer.body = Rectangle((0, 0), cabinet_width, drawer_height)
handle_x_shift = -cabinet_width / 2 + handle_width / 2 + 0.5 * inches if i % 2 == 0 else cabinet_width / 2 - handle_width / 2 - 0.5 * inches
drawer.handle = Drawing(shift=(handle_x_shift, 0))
drawer.handle.shape = Rectangle((0, 0), handle_width, handle_height)
if i % 2 == 0: # Drawers on the left side
setattr(cabinet, f'drawer_left_{i}', drawer)
else: # Drawers on the right side
setattr(cabinet, f'drawer_right_{i}', drawer)
return cabinet
with AIDL_2D:
model = cabinet_with_opposite_drawers()
print(model.Solve())
model.Render()
```
### Changes:
- Replaced the dictionary-like assignment with `setattr` to properly assign the children of the `Solid` object in a way that complies with AIDL's structure.
This should resolve the `TypeError` and correctly construct and render the cabinet with alternating drawers. Please give it a try and let me know if there are any further issues.
|