 |
CLIP Score: 26.4
from AIDL import *
def fountain_pen(
cap_length: float = 2.5 * inches,
body_length: float = 4.5 * inches,
nib_length: float = 1 * inch,
diameter: float = 0.5 * inches,
clip_length: float = 1.0 * inch,
):
"""
Create a model of a fountain pen with a cap, body, and nib section with a clip.
"""
# Fountain Pen Assembly Root
fountain_pen = Assembly()
### Cap
cap = Solid(shift=(0, cap_length / 2))
fountain_pen.cap = cap
# Cap geometry
cap.cap_cylinder = Circle((0, 0), diameter / 2)
cap.end_cap = Circle((0, cap_length), diameter / 2)
# Clip
clip = Solid(shift=(0, cap_length))
cap.clip = clip
clip_line_start = (0, 0)
clip_line_end = (clip_length / 2, 0)
clip_arc_center = (clip_length / 2, -clip_length / 4)
clip_arc_start = clip_line_end
clip_arc_end = (0, -clip_length / 2)
clip.clip_shape = [
Line(clip_line_start, clip_line_end),
Arc(clip_arc_center, clip_arc_start, clip_arc_end)
]
### Body
body = Solid(shift=(0, -body_length / 2))
fountain_pen.body = body
body.body_cylinder = Circle((0, 0), diameter / 2)
### Nib Section
nib_section = Solid(shift=(0, -body_length - nib_length / 2))
fountain_pen.nib_section = nib_section
nib_section.nib_taper_start = (0, 0)
nib_section.nib_taper_end = (diameter / 2, nib_length)
nib_section.nib_taper = [
Line(nib_section.nib_taper_start, nib_section.nib_taper_end)
]
nib_section.nib_tail_start = (0, 0)
nib_section.nib_tail_end = (0, nib_length)
nib_section.nib_tip_center = (0, nib_length + diameter / 2)
nib_section.nib_tip_start = (0, nib_length)
nib_section.nib_tip_end = (diameter / 2, nib_length)
nib_section.nib = [
Line(nib_section.nib_tail_start, nib_section.nib_tail_end),
Arc(nib_section.nib_tip_center, nib_section.nib_tip_start, nib_section.nib_tip_end)
]
return fountain_pen
# Solve and render the model
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a fountain pen
Sure! Let's walk through creating an AIDL program to generate a fountain pen.
### Fountain Pen Specifications
Let's assume the pen has the following parts:
1. **Cap**: A cylindrical cap with an end cap.
2. **Body**: A cylindrical body housing the ink reservoir.
3. **Nib Section**: A tapering section where the nib is attached.
4. **Clip**: A small clip attached to the cap.
Here's how the fountain will look in terms of a tree structure:
```
fountain_pen (Assembly)
├── cap (Solid)
│ ├── cap_cylinder (Geometry - Circle)
│ ├── end_cap (Geometry - Circle)
│ └── clip (Solid)
│ ├── clip_shape (Geometry - Line and Arc)
├── body (Solid)
│ ├── body_cylinder (Geometry - Circle)
└── nib_section (Solid)
├── nib_taper (Geometry - Line)
├── nib (Geometry - Line and Arc)
```
### AIDL Program
Let's write the AIDL program step by step:
```python
from AIDL import *
def fountain_pen(
cap_length: float = 2.5 * inches,
body_length: float = 4.5 * inches,
nib_length: float = 1 * inch,
diameter: float = 0.5 * inches,
clip_length: float = 1.0 * inch,
):
"""
Create a model of a fountain pen with a cap, body, and nib section with a clip.
"""
# Fountain Pen Assembly Root
fountain_pen = Assembly()
### Cap
cap = Solid(shift=(0, cap_length / 2))
fountain_pen.cap = cap
# Cap geometry
cap.cap_cylinder = Circle((0, 0), diameter / 2)
cap.end_cap = Circle((0, cap_length), diameter / 2)
# Clip
clip = Solid(shift=(0, cap_length))
cap.clip = clip
clip_line_start = (0, 0)
clip_line_end = (clip_length / 2, 0)
clip_arc_center = (clip_length / 2, -clip_length / 4)
clip_arc_start = clip_line_end
clip_arc_end = (0, -clip_length / 2)
clip.clip_shape = [
Line(clip_line_start, clip_line_end),
Arc(clip_arc_center, clip_arc_start, clip_arc_end)
]
### Body
body = Solid(shift=(0, -body_length / 2))
fountain_pen.body = body
body.body_cylinder = Circle((0, 0), diameter / 2)
### Nib Section
nib_section = Solid(shift=(0, -body_length - nib_length / 2))
fountain_pen.nib_section = nib_section
nib_section.nib_taper_start = (0, 0)
nib_section.nib_taper_end = (diameter / 2, nib_length)
nib_section.nib_taper = [
Line(nib_section.nib_taper_start, nib_section.nib_taper_end)
]
nib_section.nib_tail_start = (0, 0)
nib_section.nib_tail_end = (0, nib_length)
nib_section.nib_tip_center = (0, nib_length + diameter / 2)
nib_section.nib_tip_start = (0, nib_length)
nib_section.nib_tip_end = (diameter / 2, nib_length)
nib_section.nib = [
Line(nib_section.nib_tail_start, nib_section.nib_tail_end),
Arc(nib_section.nib_tip_center, nib_section.nib_tip_start, nib_section.nib_tip_end)
]
return fountain_pen
# Solve and render the model
with AIDL_2D:
model = fountain_pen()
print(model.Solve())
model.Render()
```
### Explanation:
1. **Cap**:
- Created with a cylindrical shape and an end cap based on user-defined parameters.
- A clip is attached as a combination of a line and an arc.
2. **Body**:
- Created as a simple cylindrical shape.
3. **Nib Section**:
- Created as a section that tapers and then transitions into a nib with an arc.
The above AIDL program should give you a basic model for a fountain pen. Please test it and let me know if you have any modifications or further requirements!
|