 |
CLIP Score: 24.57
from AIDL import *
def butterfly():
butterfly = Solid()
# Create the body structure
body = Solid()
butterfly.body = body
# Create the wing structures
left_upper_wing = Solid(shift=(-1.5*inch, .5*inch))
right_upper_wing = Solid(shift=(1.5*inch, .5*inch))
left_lower_wing = Solid(shift=(-1.5*inch, -1*inch))
right_lower_wing = Solid(shift=(1.5*inch, -1*inch))
butterfly.left_upper_wing = left_upper_wing
butterfly.right_upper_wing = right_upper_wing
butterfly.left_lower_wing = left_lower_wing
butterfly.right_lower_wing = right_lower_wing
# Set constraints
# Centering the body
butterfly.AddConstraint(butterfly.bb.horizontal_center == body.bb.horizontal_center)
butterfly.AddConstraint(butterfly.bb.vertical_center == body.bb.vertical_center)
# Horizontally align the wings
butterfly.AddConstraint(left_upper_wing.bb.top == right_upper_wing.bb.top)
butterfly.AddConstraint(left_lower_wing.bb.bottom == right_lower_wing.bb.bottom)
# Vertically align the wings
butterfly.AddConstraint(left_upper_wing.bb.right == body.bb.left)
butterfly.AddConstraint(right_upper_wing.bb.left == body.bb.right)
butterfly.AddConstraint(left_lower_wing.bb.right == body.bb.left)
butterfly.AddConstraint(right_lower_wing.bb.left == body.bb.right)
# Define the body geometry
body.core = RoundedRectangle((0,0), .5*inch, 2.5*inch, .25*inch)
# Define the wing geometry
left_upper_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, .75*inch)),
Line((-.75*inch, .75*inch), (0, 1*inch)),
Line((0, 1*inch), (.75*inch, .75*inch)),
Line((.75*inch, .75*inch), (.75*inch, 0)),
Line((.75*inch,.75*inch),(.75*inch/2,.75*inch)),
Line((-.75*inch,.75*inch),(-.75*inch/2,.75*inch))
]
right_upper_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, .75*inch)),
Line((-.75*inch, .75*inch), (0, 1*inch)),
Line((0, 1*inch), (.75*inch, .75*inch)),
Line((.75*inch, .75*inch), (.75*inch, 0)),
Line((.75*inch,.75*inch),(.75*inch/2,.75*inch)),
Line((-.75*inch,.75*inch),(-.75*inch/2,.75*inch))
]
left_lower_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, -.75*inch)),
Line((-.75*inch, -.75*inch), (0, -1*inch)),
Line((0, -1*inch), (.75*inch, -.75*inch)),
Line((.75*inch, -.75*inch), (.75*inch, 0)),
Line((.75*inch, -.75*inch),(.75*inch/2,-.75*inch)),
Line((-.75*inch,-.75*inch),(-.75*inch/2,-.75*inch))
]
right_lower_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, -.75*inch)),
Line((-.75*inch, -.75*inch), (0, -1*inch)),
Line((0, -1*inch), (.75*inch, -.75*inch)),
Line((.75*inch, -.75*inch), (.75*inch, 0)),
Line((.75*inch, -.75*inch),(.75*inch/2,-.75*inch)),
Line((-.75*inch,-.75*inch),(-.75*inch/2,-.75*inch))
]
return butterfly
with AIDL_2D:
model = butterfly()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a butterfly
Sure! Let's start by defining the structures and their hierarchical relationships for the butterfly. We'll create separate structures for the body and the wings. The wings will also be further divided into four sections: the left and right upper wings, and the left and right lower wings.
Here's the initial setup for the butterfly model:
1. **Body**: Contains a single Solid structure.
2. **Wings**: Consists of four Solids: left_upper_wing, right_upper_wing, left_lower_wing, and right_lower_wing.
Let's write this first part of the program.
```python
from AIDL import *
def butterfly():
butterfly = Solid()
# Create the body structure
body = Solid()
butterfly.body = body
# Create the wing structures
left_upper_wing = Solid(shift=(-1.5*inch, .5*inch))
right_upper_wing = Solid(shift=(1.5*inch, .5*inch))
left_lower_wing = Solid(shift=(-1.5*inch, -1*inch))
right_lower_wing = Solid(shift=(1.5*inch, -1*inch))
butterfly.left_upper_wing = left_upper_wing
butterfly.right_upper_wing = right_upper_wing
butterfly.left_lower_wing = left_lower_wing
butterfly.right_lower_wing = right_lower_wing
# Return the root of the model
return butterfly
with AIDL_2D:
model = butterfly()
print(model.Solve())
model.Render()
```
Now, let's move on to defining the constraints between the structures. We'll center the body and wings, and fix the relative positions of the wings to the body.
```python
from AIDL import *
def butterfly():
butterfly = Solid()
# Create the body structure
body = Solid()
butterfly.body = body
# Create the wing structures
left_upper_wing = Solid(shift=(-1.5*inch, .5*inch))
right_upper_wing = Solid(shift=(1.5*inch, .5*inch))
left_lower_wing = Solid(shift=(-1.5*inch, -1*inch))
right_lower_wing = Solid(shift=(1.5*inch, -1*inch))
butterfly.left_upper_wing = left_upper_wing
butterfly.right_upper_wing = right_upper_wing
butterfly.left_lower_wing = left_lower_wing
butterfly.right_lower_wing = right_lower_wing
# Set constraints
# Centering the body
butterfly.AddConstraint(butterfly.bb.horizontal_center == body.bb.horizontal_center)
butterfly.AddConstraint(butterfly.bb.vertical_center == body.bb.vertical_center)
# Horizontally align the wings
butterfly.AddConstraint(left_upper_wing.bb.top == right_upper_wing.bb.top)
butterfly.AddConstraint(left_lower_wing.bb.bottom == right_lower_wing.bb.bottom)
# Vertically align the wings
butterfly.AddConstraint(left_upper_wing.bb.right == body.bb.left)
butterfly.AddConstraint(right_upper_wing.bb.left == body.bb.right)
butterfly.AddConstraint(left_lower_wing.bb.right == body.bb.left)
butterfly.AddConstraint(right_lower_wing.bb.left == body.bb.right)
# Return the root of the model
return butterfly
with AIDL_2D:
model = butterfly()
print(model.Solve())
model.Render()
```
Next, we'll add the geometric shapes to the body and the wings. We'll use a rounded rectangle for the body and Compound shapes for the wings.
Let's define the geometry for each part step-by-step:
1. **Body**: A rounded rectangle.
2. **Wings**: Ellipses and lines to outline the wings.
Here is the complete program for generating a butterfly with the geometry added:
```python
from AIDL import *
def butterfly():
butterfly = Solid()
# Create the body structure
body = Solid()
butterfly.body = body
# Create the wing structures
left_upper_wing = Solid(shift=(-1.5*inch, .5*inch))
right_upper_wing = Solid(shift=(1.5*inch, .5*inch))
left_lower_wing = Solid(shift=(-1.5*inch, -1*inch))
right_lower_wing = Solid(shift=(1.5*inch, -1*inch))
butterfly.left_upper_wing = left_upper_wing
butterfly.right_upper_wing = right_upper_wing
butterfly.left_lower_wing = left_lower_wing
butterfly.right_lower_wing = right_lower_wing
# Set constraints
# Centering the body
butterfly.AddConstraint(butterfly.bb.horizontal_center == body.bb.horizontal_center)
butterfly.AddConstraint(butterfly.bb.vertical_center == body.bb.vertical_center)
# Horizontally align the wings
butterfly.AddConstraint(left_upper_wing.bb.top == right_upper_wing.bb.top)
butterfly.AddConstraint(left_lower_wing.bb.bottom == right_lower_wing.bb.bottom)
# Vertically align the wings
butterfly.AddConstraint(left_upper_wing.bb.right == body.bb.left)
butterfly.AddConstraint(right_upper_wing.bb.left == body.bb.right)
butterfly.AddConstraint(left_lower_wing.bb.right == body.bb.left)
butterfly.AddConstraint(right_lower_wing.bb.left == body.bb.right)
# Define the body geometry
body.core = RoundedRectangle((0,0), .5*inch, 2.5*inch, .25*inch)
# Define the wing geometry
left_upper_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, .75*inch)),
Line((-.75*inch, .75*inch), (0, 1*inch)),
Line((0, 1*inch), (.75*inch, .75*inch)),
Line((.75*inch, .75*inch), (.75*inch, 0)),
Line((.75*inch,.75*inch),(.75*inch/2,.75*inch)),
Line((-.75*inch,.75*inch),(-.75*inch/2,.75*inch))
]
right_upper_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, .75*inch)),
Line((-.75*inch, .75*inch), (0, 1*inch)),
Line((0, 1*inch), (.75*inch, .75*inch)),
Line((.75*inch, .75*inch), (.75*inch, 0)),
Line((.75*inch,.75*inch),(.75*inch/2,.75*inch)),
Line((-.75*inch,.75*inch),(-.75*inch/2,.75*inch))
]
left_lower_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, -.75*inch)),
Line((-.75*inch, -.75*inch), (0, -1*inch)),
Line((0, -1*inch), (.75*inch, -.75*inch)),
Line((.75*inch, -.75*inch), (.75*inch, 0)),
Line((.75*inch, -.75*inch),(.75*inch/2,-.75*inch)),
Line((-.75*inch,-.75*inch),(-.75*inch/2,-.75*inch))
]
right_lower_wing.geometry = [
Line((-.75*inch, 0), (-.75*inch, -.75*inch)),
Line((-.75*inch, -.75*inch), (0, -1*inch)),
Line((0, -1*inch), (.75*inch, -.75*inch)),
Line((.75*inch, -.75*inch), (.75*inch, 0)),
Line((.75*inch, -.75*inch),(.75*inch/2,-.75*inch)),
Line((-.75*inch,-.75*inch),(-.75*inch/2,-.75*inch))
]
return butterfly
with AIDL_2D:
model = butterfly()
print(model.Solve())
model.Render()
```
This should create a simple butterfly with a rounded rectangle as its body and geometric patterns representing its wings. Adjustments can be made to the shapes, sizes, and constraints to achieve the exact design you want. Feel free to give feedback and specify any additional details or modifications you'd like to make to the model.
|