 |
CLIP Score: 27.63
from AIDL import *
def fountain_pen(
pen_length: float = 6 * inches,
cap_length: float = 2 * inches,
barrel_length: float = 3.5 * inches,
nib_length: float = 0.5 * inches,
pen_diameter: float = 0.4 * inches
):
"""
Constructs a simple fountain pen with a cap, barrel, section, and nib.
"""
pen = Solid()
# Sections of the pen
cap = Solid()
barrel = Solid()
section = Solid()
nib = Solid()
# Establish hierarchical relationships
pen.cap = cap
pen.barrel = barrel
pen.section = section
pen.nib = nib
# Translation shifts
cap.shift = (0, pen_length - cap_length)
barrel.shift = (0, cap_length)
section.shift = (0, barrel_length)
nib.shift = (0, cap_length + barrel_length)
# Add compositional constraints for positioning
pen.AddConstraint(cap.bb.bottom == barrel.bb.top)
pen.AddConstraint(barrel.bb.bottom == section.bb.top)
pen.AddConstraint(section.bb.bottom == nib.bb.top)
# Geometry for cap
cap.body = Rectangle((0,0), pen_diameter, cap_length)
cap.clip_hole = Hole(shift=(0, cap_length * 0.25))
cap.clip_hole.hole = Circle((0,0), pen_diameter * 0.1)
# Geometry for barrel
barrel.body = Rectangle((0,0), pen_diameter, barrel_length)
# Geometry for section
section.body = Rectangle((0,0), pen_diameter, nib_length)
# Geometry for nib
nib.body = Triangle((0,0), pen_diameter, nib_length)
nib.detail = Drawing()
nib.body_detail = Rectangle((0,0), pen_diameter*0.6, nib_length*0.4)
return pen
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a fountain pen
Sure, let's start by defining the structures and their hierarchical relationships for the fountain pen model. We will build this gradually to ensure everything is correctly placed and constrained.
We will define our fountain pen model to include the following main parts:
- Cap
- Barrel
- Section (part of the pen where the nib is attached)
- Nib
We will integrate holes and drawings as needed for engravings or air holes.
First, let's draft the initial structures for these parts.
### Step 1: Define the main structures and their hierarchical relationships
```python
from AIDL import *
def fountain_pen(
pen_length: float = 6 * inches,
cap_length: float = 2 * inches,
barrel_length: float = 3.5 * inches,
nib_length: float = 0.5 * inches,
pen_diameter: float = 0.4 * inches
):
"""
Constructs a simple fountain pen with a cap, barrel, section, and nib.
"""
pen = Solid()
# Sections of the pen
cap = Solid()
barrel = Solid()
section = Solid()
nib = Solid()
# Establish hierarchical relationships
pen.cap = cap
pen.barrel = barrel
pen.section = section
pen.nib = nib
# Translate sections relative to one another
cap.shift = (0, pen_length - cap_length)
barrel.shift = (0, barrel_length)
section.shift = (0, barrel_length)
nib.shift = (0, section_length)
return pen
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
```
### Step 2: Add constraints between the structures
In this step, we will add constraints to ensure that the individual parts are connected correctly. Let's do that:
```python
from AIDL import *
def fountain_pen(
pen_length: float = 6 * inches,
cap_length: float = 2 * inches,
barrel_length: float = 3.5 * inches,
nib_length: float = 0.5 * inches,
pen_diameter: float = 0.4 * inches
):
"""
Constructs a simple fountain pen with a cap, barrel, section, and nib.
"""
pen = Solid()
# Sections of the pen
cap = Solid()
barrel = Solid()
section = Solid()
nib = Solid()
# Establish hierarchical relationships
pen.cap = cap
pen.barrel = barrel
pen.section = section
pen.nib = nib
# Translate sections relative to one another
cap.shift = (0, pen_length - cap_length)
barrel.shift = (0, cap_length)
section.shift = (0, nib_length)
nib.shift = (0, cap_length + barrel_length)
# Add constraints for positioning
pen.AddConstraint(cap.bb.bottom == barrel.bb.top)
pen.AddConstraint(barrel.bb.bottom == section.bb.top)
pen.AddConstraint(section.bb.bottom == nib.bb.top)
return pen
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
```
### Step 3: Add geometry for each structure
Next, we will add the actual geometry for each section of the pen.
```python
from AIDL import *
def fountain_pen(
pen_length: float = 6 * inches,
cap_length: float = 2 * inches,
barrel_length: float = 3.5 * inches,
nib_length: float = 0.5 * inches,
pen_diameter: float = 0.4 * inches
):
"""
Constructs a simple fountain pen with a cap, barrel, section, and nib.
"""
pen = Solid()
# Sections of the pen
cap = Solid()
barrel = Solid()
section = Solid()
nib = Solid()
# Establish hierarchical relationships
pen.cap = cap
pen.barrel = barrel
pen.section = section
pen.nib = nib
# Translate sections relative to one another
cap.shift = (0, pen_length - cap_length)
barrel.shift = (0, cap_length)
section.shift = (0, nib_length)
nib.shift = (0, cap_length + barrel_length)
# Add constraints for positioning
pen.AddConstraint(cap.bb.bottom == barrel.bb.top)
pen.AddConstraint(barrel.bb.bottom == section.bb.top)
pen.AddConstraint(section.bb.bottom == nib.bb.top)
# Geometry for cap
cap.body = Rectangle((0,0), pen_diameter, cap_length)
# Geometry for barrel
barrel.body = Rectangle((0,0), pen_diameter, barrel_length)
# Geometry for section
section.body = Rectangle((0,0), pen_diameter, nib_length)
# Geometry for nib
nib.body = Triangle((0,0), pen_diameter, nib_length)
return pen
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
```
### Step 4: Add any additional details, engravings, or holes
Further details like engravings or clip holes can be added here.
```python
from AIDL import *
def fountain_pen(
pen_length: float = 6 * inches,
cap_length: float = 2 * inches,
barrel_length: float = 3.5 * inches,
nib_length: float = 0.5 * inches,
pen_diameter: float = 0.4 * inches
):
"""
Constructs a simple fountain pen with a cap, barrel, section, and nib.
"""
pen = Solid()
# Sections of the pen
cap = Solid()
barrel = Solid()
section = Solid()
nib = Solid()
# Establish hierarchical relationships
pen.cap = cap
pen.barrel = barrel
pen.section = section
pen.nib = nib
# Translation shifts
cap.shift = (0, pen_length - cap_length)
barrel.shift = (0, cap_length)
section.shift = (0, barrel_length)
nib.shift = (0, cap_length + barrel_length)
# Add compositional constraints for positioning
pen.AddConstraint(cap.bb.bottom == barrel.bb.top)
pen.AddConstraint(barrel.bb.bottom == section.bb.top)
pen.AddConstraint(section.bb.bottom == nib.bb.top)
# Geometry for cap
cap.body = Rectangle((0,0), pen_diameter, cap_length)
cap.clip_hole = Hole(shift=(0, cap_length * 0.25))
cap.clip_hole.hole = Circle((0,0), pen_diameter * 0.1)
# Geometry for barrel
barrel.body = Rectangle((0,0), pen_diameter, barrel_length)
# Geometry for section
section.body = Rectangle((0,0), pen_diameter, nib_length)
# Geometry for nib
nib.body = Triangle((0,0), pen_diameter, nib_length)
nib.detail = Drawing()
nib.body_detail = Rectangle((0,0), pen_diameter*0.6, nib_length*0.4)
return pen
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
```
This sets up a basic fountain pen model comprised of several distinct parts: cap, barrel, section, and nib with some details. You can further add more specific details and constraints as needed for a more accurate model.
Feel free to iterate or ask for any specific parts or features you want to add, and I can help refine the model!
|