 |
CLIP Score: 29.03
from AIDL import *
def chair(
seat_width: float = 16 * inches,
seat_depth: float = 16 * inches,
seat_height: float = 18 * inches,
leg_thickness: float = 1.5 * inches,
backrest_height: float = 15 * inches,
support_height: float = 8 * inches,
support_thickness: float = 0.75 * inches
):
chair = Assembly()
seat = Solid()
legs = [Solid(shift=(0,0)) for _ in range(4)]
backrest = Solid()
supports = [Solid() for _ in range(2)]
chair.seat = seat
chair.legs = legs
chair.backrest = backrest
chair.supports = supports
# Define the seat geometry
seat.shape = RoundedRectangle((0,0), seat_width, seat_depth, 1.5 * inches)
seat.seat_shape = seat.shape
# Define the leg geometry
for leg in legs:
leg.shape = Rectangle((0,0), leg_thickness, seat_height)
leg.leg_shape = leg.shape
# Define the backrest geometry
backrest.shape = Rectangle((0,0), seat_width, backrest_height)
backrest.backrest_shape = backrest.shape
# Define the support geometry
supports[0].shape = Rectangle((0,0), seat_width, support_thickness)
supports[1].shape = Rectangle((0,0), support_thickness, support_height)
supports[0].support_shape = supports[0].shape
supports[1].support_shape = supports[1].shape
# Position the legs at the corners of the seat
for idx, leg in enumerate(legs):
offset_x = (seat_width - leg_thickness) / 2 * (-1 if idx % 2 == 0 else 1)
offset_y = (seat_depth - leg_thickness) / 2 * (-1 if idx // 2 == 0 else 1)
leg.shift = (offset_x, offset_y)
# Position the backrest relative to the seat
backrest.shift = (0, seat_height / 2)
# Position the supports between the legs
supports[0].shift = (0, seat_height / 2) # Horizontal support
supports[1].shift = (0, seat_height / 2 - support_height) # Vertical support
# Constrain the sizes and relative positions
chair.AddConstraint(seat.shape.width == seat_width)
chair.AddConstraint(seat.shape.height == seat_depth)
for leg in legs:
leg.AddConstraint(leg.shape.width == leg_thickness)
leg.AddConstraint(leg.shape.height == seat_height)
backrest.AddConstraint(backrest.shape.width == seat_width)
backrest.AddConstraint(backrest.shape.height == backrest_height)
supports[0].AddConstraint(supports[0].shape.width == seat_width)
supports[0].AddConstraint(supports[0].shape.height == support_thickness)
supports[1].AddConstraint(supports[1].shape.width == support_thickness)
supports[1].AddConstraint(supports[1].shape.height == support_height)
return chair
with AIDL_2D:
model = chair()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a chair
Sure! Let's break down the design of a simple chair into manageable components. We'll consider a chair with a seat, four legs, a backrest, and support elements. In this example, we'll assume the following design parameters:
1. **Seat**: Rectangular with rounded edges.
2. **Legs**: Four cylindrical or rectangular legs.
3. **Backrest**: A rectangular backrest for simplicity.
4. **Support Elements**: Cross supports between the legs for added stability.
We'll go step by step to build this chair:
1. Define the structures and their hierarchical relationships.
2. Add constraints between the structures.
3. Define geometry for each structure.
4. Add the necessary local constraints to ensure the correct sizes and positions of components.
### Step 1: Define the Structures
First, let’s define the main components of the chair: seat, legs, backrest, and support elements.
```python
from AIDL import *
def chair(
seat_width: float = 16 * inches,
seat_depth: float = 16 * inches,
seat_height: float = 18 * inches,
leg_thickness: float = 1.5 * inches,
backrest_height: float = 15 * inches,
support_height: float = 8 * inches,
support_thickness: float = 0.75 * inches
):
chair = Assembly()
seat = Solid()
legs = [Solid() for _ in range(4)]
backrest = Solid()
supports = [Solid() for _ in range(2)]
chair.seat = seat
chair.legs = legs
chair.backrest = backrest
chair.supports = supports
return chair
with AIDL_2D:
model = chair()
print(model.Solve())
model.Render()
```
### Step 2: Add Constraints Between Structures
Next, we'll position the legs, seat, backrest, and supports relative to one another using constraints.
```python
def chair(
seat_width: float = 16 * inches,
seat_depth: float = 16 * inches,
seat_height: float = 18 * inches,
leg_thickness: float = 1.5 * inches,
backrest_height: float = 15 * inches,
support_height: float = 8 * inches,
support_thickness: float = 0.75 * inches
):
chair = Assembly()
seat = Solid()
legs = [Solid() for _ in range(4)]
backrest = Solid()
supports = [Solid() for _ in range(2)]
chair.seat = seat
chair.legs = legs
chair.backrest = backrest
chair.supports = supports
# Position the legs at the corners of the seat
for idx, leg in enumerate(legs):
offset_x = (seat_width - leg_thickness) / 2 * (-1 if idx % 2 == 0 else 1)
offset_y = (seat_depth - leg_thickness) / 2 * (-1 if idx // 2 == 0 else 1)
leg.shift = (offset_x, offset_y)
# Position the backrest relative to the seat
backrest.shift = (0, seat_height)
# Position the supports between the legs
supports[0].shift = (0, seat_height / 2) # Horizontal support
supports[1].shift = (0, seat_height / 2 - support_height) # Vertical support
# Constrain the sizes and relative positions
seat.AddConstraint(seat.height == (seat_width, seat_depth))
for leg in legs:
leg.AddConstraint((leg_thickness, seat_height))
backrest.AddConstraint(backrest.height == backrest_height)
supports[0].AddConstraint(supports[0].width == seat_width)
supports[1].AddConstraint(supports[1].height == support_height)
chair.seat = seat
chair.legs = legs
chair.backrest = backrest
chair.supports = supports
return chair
with AIDL_2D:
model = chair()
print(model.Solve())
model.Render()
```
### Step 3: Add Geometry to Each Structure
Now, we need to define the specific geometry for the seat, legs, backrest, and supports.
```python
def chair(
seat_width: float = 16 * inches,
seat_depth: float = 16 * inches,
seat_height: float = 18 * inches,
leg_thickness: float = 1.5 * inches,
backrest_height: float = 15 * inches,
support_height: float = 8 * inches,
support_thickness: float = 0.75 * inches
):
chair = Assembly()
seat = Solid()
legs = [Solid() for _ in range(4)]
backrest = Solid()
supports = [Solid() for _ in range(2)]
chair.seat = seat
chair.legs = legs
chair.backrest = backrest
chair.supports = supports
# Define the seat geometry
seat_shape = RoundedRectangle((0,0), seat_width, seat_depth, 1.5 * inches)
seat.AddGeometry(seat_shape)
# Define the leg geometry
for leg in legs:
leg_shape = Rectangle((0,0), leg_thickness, seat_height)
leg.AddGeometry(leg_shape)
# Define the backrest geometry
backrest_shape = Rectangle((0,0), seat_width, backrest_height)
backrest.AddGeometry(backrest_shape)
# Define the support geometry
supports[0].AddGeometry(Rectangle((0,0), seat_width, support_thickness))
supports[1].AddGeometry(Rectangle((0,0), support_thickness, support_height))
# Position the legs at the corners of the seat
for idx, leg in enumerate(legs):
offset_x = (seat_width - leg_thickness) / 2 * (-1 if idx % 2 == 0 else 1)
offset_y = (seat_depth - leg_thickness) / 2 * (-1 if idx // 2 == 0 else 1)
leg.shift = (offset_x, offset_y)
# Position the backrest relative to the seat:
# Top center of the backrest should coincide with back center of seat
backrest.shift = (0, (seat_depth / 2) - (leg_thickness / 2))
# Position the supports between the legs
supports[0].shift = (0, seat_height / 2) # Horizontal support
supports[1].shift = (0, seat_height / 2 - support_height) # Vertical support
# Constrain the sizes and relative positions
chair.AddConstraint(seat.shape.width == seat_width)
chair.AddConstraint(seat.shape.height == seat_height)
for leg in legs:
leg.AddConstraint(leg_shape.width == leg_thickness)
leg.AddConstraint(leg_shape.height == seat_height)
backrest.AddConstraint(backrest_shape.width == seat_width)
backrest.AddConstraint(backrest_shape.height == backrest_height)
supports[0].AddConstraint(Rectangle.width == seat_width)
supports[0].AddConstraint(Rectangle.height == support_thickness)
supports[1].AddConstraint(Rectangle.width == support_thickness)
supports[1].AddConstraint(Rectangle.height == support_height)
return chair
with AIDL_2D:
model = chair()
print(model.Solve())
model.Render()
```
### Full Code
```python
from AIDL import *
def chair(
seat_width: float = 16 * inches,
seat_depth: float = 16 * inches,
seat_height: float = 18 * inches,
leg_thickness: float = 1.5 * inches,
backrest_height: float = 15 * inches,
support_height: float = 8 * inches,
support_thickness: float = 0.75 * inches
):
chair = Assembly()
seat = Solid()
legs = [Solid(shift=(0,0)) for _ in range(4)]
backrest = Solid()
supports = [Solid() for _ in range(2)]
chair.seat = seat
chair.legs = legs
chair.backrest = backrest
chair.supports = supports
# Define the seat geometry
seat.shape = RoundedRectangle((0,0), seat_width, seat_depth, 1.5 * inches)
seat.seat_shape = seat.shape
# Define the leg geometry
for leg in legs:
leg.shape = Rectangle((0,0), leg_thickness, seat_height)
leg.leg_shape = leg.shape
# Define the backrest geometry
backrest.shape = Rectangle((0,0), seat_width, backrest_height)
backrest.backrest_shape = backrest.shape
# Define the support geometry
supports[0].shape = Rectangle((0,0), seat_width, support_thickness)
supports[1].shape = Rectangle((0,0), support_thickness, support_height)
supports[0].support_shape = supports[0].shape
supports[1].support_shape = supports[1].shape
# Position the legs at the corners of the seat
for idx, leg in enumerate(legs):
offset_x = (seat_width - leg_thickness) / 2 * (-1 if idx % 2 == 0 else 1)
offset_y = (seat_depth - leg_thickness) / 2 * (-1 if idx // 2 == 0 else 1)
leg.shift = (offset_x, offset_y)
# Position the backrest relative to the seat
backrest.shift = (0, seat_height / 2)
# Position the supports between the legs
supports[0].shift = (0, seat_height / 2) # Horizontal support
supports[1].shift = (0, seat_height / 2 - support_height) # Vertical support
# Constrain the sizes and relative positions
chair.AddConstraint(seat.shape.width == seat_width)
chair.AddConstraint(seat.shape.height == seat_depth)
for leg in legs:
leg.AddConstraint(leg.shape.width == leg_thickness)
leg.AddConstraint(leg.shape.height == seat_height)
backrest.AddConstraint(backrest.shape.width == seat_width)
backrest.AddConstraint(backrest.shape.height == backrest_height)
supports[0].AddConstraint(supports[0].shape.width == seat_width)
supports[0].AddConstraint(supports[0].shape.height == support_thickness)
supports[1].AddConstraint(supports[1].shape.width == support_thickness)
supports[1].AddConstraint(supports[1].shape.height == support_height)
return chair
with AIDL_2D:
model = chair()
print(model.Solve())
model.Render()
```
This resulting code sets up the structure for a basic chair with a seat, four legs, a backrest, and support elements. Let me know if there are any additional features or adjustments you'd like to make to the chair design!
|