 |
CLIP Score: 26.78
from AIDL import *
def fancy_teapot(body_radius=3*inches, body_height=4*inches, neck_radius=1*inch, lid_height=1*inch):
"""
Creates a model of a fancy teapot with a round body, lid, spout, and handle.
"""
# Define the teapot structure
teapot = Solid()
teapot.body = Solid()
teapot.lid = Solid()
teapot.spout = Solid()
teapot.handle = Solid()
# Define the body structure
teapot.body.bottom = Circle((0,0), body_radius)
teapot.body.side_wall = Arc((0, -body_height/2), -90, 90, body_radius + neck_radius)
# Define the lid structure
teapot.lid.top = Arc((0, body_height/2 + lid_height/2), 0, 180, body_radius - neck_radius)
teapot.lid.knob = Circle((0, body_height/2 + lid_height + 0.25*inch), 0.25*inch)
# Define the spout structure
teapot.spout.base = Circle((body_radius + 0.25*inch, body_height/4), neck_radius)
teapot.spout.tip = Arc((body_radius + 0.25*inch + 2*inch, body_height/4), -30, 30, 0.5*inch)
# Define the handle structure
teapot.handle.base = Circle((-body_radius - 0.5*inch, body_height/2), neck_radius)
teapot.handle.loop = Arc((-body_radius - 2*inch, body_height/2), 0, 180, 1*inch)
# Define the constraints
teapot.AddConstraint(teapot.body.bb.horizontal_center == teapot.bb.horizontal_center)
teapot.AddConstraint(teapot.lid.bb.horizontal_center == teapot.body.bb.horizontal_center)
teapot.AddConstraint(teapot.spout.base.center.u == teapot.body.bb.right + 0.25*inch)
teapot.AddConstraint(teapot.handle.base.center.u == teapot.body.bb.left - 0.5*inch)
# Align the lid on top of the body and add the knob in the center of the lid
teapot.AddConstraint(teapot.lid.top.center.v == teapot.body.bb.top + lid_height/2)
teapot.AddConstraint(teapot.lid.knob.center.v == teapot.body.bb.top + lid_height + 0.25*inch)
# Align the spout and handle vertically centered with the body
teapot.AddConstraint(teapot.spout.base.center.v == teapot.body.bb.vertical_center)
teapot.AddConstraint(teapot.handle.base.center.v == teapot.body.bb.vertical_center)
return teapot
with AIDL_2D:
model = fancy_teapot()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a fancy teapot
Sure! Let's walk through the process of creating a "fancy teapot" in AIDL. To do this effectively, we'll break down the teapot into several key components: the body, lid, spout, and handle.
### Step 1: Outline the Main Components and Their Hierarchical Relationships
- **Teapot (Solid)**
- **Body (Solid)**
- **Bottom (Solid)**
- **Side Walls (Solid)**
- **Lid (Solid)**
- **Top (Solid)**
- **Knob (Solid)**
- **Spout (Solid)**
- **Handle (Solid)**
### Step 2: Define Global and Local Constraints
1. **Teapot Constraints**:
- Align and position the various components of the teapot realistically.
2. **Body Constraints**:
- Ensure the base and walls form a circular shape.
3. **Lid Constraints**:
- Place the lid on top of the teapot body and ensure correct alignment.
4. **Spout Constraints**:
- Position at an angle that allows pouring effectively.
5. **Handle Constraints**:
- Place opposite the spout for balanced holding.
### Step 3: Add Geometry to Each Structure
Let's define the geometry for each component step-by-step.
```python
from AIDL import *
def fancy_teapot(body_radius=3*inches, body_height=4*inches, neck_radius=1*inch, lid_height=1*inch):
"""
Creates a model of a fancy teapot with a round body, lid, spout, and handle.
"""
# Define the teapot structure
teapot = Solid()
teapot.body = Solid()
teapot.lid = Solid()
teapot.spout = Solid()
teapot.handle = Solid()
# Define the body structure
teapot.body.bottom = Circle((0,0), body_radius)
teapot.body.side_wall = Arc((0, -body_height/2), -90, 90, body_radius + neck_radius)
# Define the lid structure
teapot.lid.top = Arc((0, body_height/2 + lid_height/2), 0, 180, body_radius - neck_radius)
teapot.lid.knob = Circle((0, body_height/2 + lid_height + 0.25*inch), 0.25*inch)
# Define the spout structure
teapot.spout.base = Circle((body_radius + 0.25*inch, body_height/4), neck_radius)
teapot.spout.tip = Arc((body_radius + 0.25*inch + 2*inch, body_height/4), -30, 30, 0.5*inch)
# Define the handle structure
teapot.handle.base = Circle((-body_radius - 0.5*inch, body_height/2), neck_radius)
teapot.handle.loop = Arc((-body_radius - 2*inch, body_height/2), 0, 180, 1*inch)
# Define the constraints
teapot.AddConstraint(teapot.body.bb.horizontal_center == teapot.bb.horizontal_center)
teapot.AddConstraint(teapot.lid.bb.horizontal_center == teapot.body.bb.horizontal_center)
teapot.AddConstraint(teapot.spout.base.center.u == teapot.body.bb.right + 0.25*inch)
teapot.AddConstraint(teapot.handle.base.center.u == teapot.body.bb.left - 0.5*inch)
# Align the lid on top of the body and add the knob in the center of the lid
teapot.AddConstraint(teapot.lid.top.center.v == teapot.body.bb.top + lid_height/2)
teapot.AddConstraint(teapot.lid.knob.center.v == teapot.body.bb.top + lid_height + 0.25*inch)
# Align the spout and handle vertically centered with the body
teapot.AddConstraint(teapot.spout.base.center.v == teapot.body.bb.vertical_center)
teapot.AddConstraint(teapot.handle.base.center.v == teapot.body.bb.vertical_center)
return teapot
with AIDL_2D:
model = fancy_teapot()
print(model.Solve())
model.Render()
```
This code defines a simple model for a fancy teapot with a main body, lid, spout, and handle. Each part is given basic geometry and appropriate constraints to put them in place relative to each other. You can expand on this and add more detailed features and constraints as required to refine the design. Please let me know if you need any further adjustments or additional features in the model!
|