 |
CLIP Score: 27.65
from AIDL import *
inch = 25.4 # 1 inch = 25.4 mm
def castle(
wall_length: float = 12*inch,
wall_height: float = 6*inch,
tower_radius: float = 1.5*inch,
gate_width: float = 2*inch,
gate_height: float = 3*inch
):
castle = Solid()
# Main castle walls
walls = Solid()
castle.walls = walls
# Front Wall
walls.front = Rectangle((0, 0), wall_length, wall_height)
# Back Wall
walls.back = Rectangle((0, -wall_length), wall_length, wall_height)
# Left Wall
walls.left = Rectangle((-wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Right Wall
walls.right = Rectangle((wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Towers
towers = Solid()
castle.towers = towers
# Four towers at corners
towers.tl_tower = Circle((-wall_length / 2, wall_length / 2), tower_radius)
towers.tr_tower = Circle((wall_length / 2, wall_length / 2), tower_radius)
towers.bl_tower = Circle((-wall_length / 2, -wall_length / 2), tower_radius)
towers.br_tower = Circle((wall_length / 2, -wall_length / 2), tower_radius)
# Gate
gate = Hole(shift=(0, -1*inch))
castle.gate = gate
gate_shape = Rectangle((0, wall_height / 2), gate_width, gate_height)
gate.shape = gate_shape
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
|
Please write an AIDL program to generate a castle
Sure, let's proceed step-by-step to create a castle. To keep things manageable, we'll break the castle down into several key components: main walls, towers, and a gate.
### Step 1: Define the Main Structure of the Castle
Let's start by defining the main walls of the castle, which will be rectangular structures.
```python
from AIDL import *
def castle(
wall_length: float = 12*inches,
wall_height: float = 6*inches,
tower_radius: float = 1.5*inches,
gate_width: float = 2*inches,
gate_height: float = 3*inches
):
castle = Solid()
# Main castle walls
walls = Solid()
castle.walls = walls
# Front Wall
walls.front = Rectangle((0, 0), wall_length, wall_height)
# Back Wall
walls.back = Rectangle((0, -wall_length), wall_length, wall_height)
# Left Wall
walls.left = Rectangle((-wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Right Wall
walls.right = Rectangle((wall_length / 2, -wall_length / 2), wall_height, wall_length)
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
```
### Step 2: Add Towers at the Corners
Next, we'll add towers to the corners of the castle. The towers will be circular in shape.
```python
def castle(
wall_length: float = 12*inches,
wall_height: float = 6*inches,
tower_radius: float = 1.5*inches,
gate_width: float = 2*inches,
gate_height: float = 3*inches
):
castle = Solid()
# Main castle walls
walls = Solid()
castle.walls = walls
# Front Wall
walls.front = Rectangle((0, 0), wall_length, wall_height)
# Back Wall
walls.back = Rectangle((0, -wall_length), wall_length, wall_height)
# Left Wall
walls.left = Rectangle((-wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Right Wall
walls.right = Rectangle((wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Towers
towers = Solid()
castle.towers = towers
# Four towers at corners
towers.tl_tower = Circle((-wall_length / 2, wall_length / 2), tower_radius)
towers.tr_tower = Circle((wall_length / 2, wall_length / 2), tower_radius)
towers.bl_tower = Circle((-wall_length / 2, -wall_length / 2), tower_radius)
towers.br_tower = Circle((wall_length / 2, -wall_length / 2), tower_radius)
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
```
### Step 3: Add a Gate
Finally, let's add a gate to the front wall. The gate will be a hole cut out from the wall.
```python
def castle(
wall_length: float = 12*inches,
wall_height: float = 6*inches,
tower_radius: float = 1.5*inches,
gate_width: float = 2*inches,
gate_height: float = 3*inches
):
castle = Solid()
# Main castle walls
walls = Solid()
castle.walls = walls
# Front Wall
walls.front = Rectangle((0, 0), wall_length, wall_height)
# Back Wall
walls.back = Rectangle((0, -wall_length), wall_length, wall_height)
# Left Wall
walls.left = Rectangle((-wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Right Wall
walls.right = Rectangle((wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Towers
towers = Solid()
castle.towers = towers
# Four towers at corners
towers.tl_tower = Circle((-wall_length / 2, wall_length / 2), tower_radius)
towers.tr_tower = Circle((wall_length / 2, wall_length / 2), tower_radius)
towers.bl_tower = Circle((-wall_length / 2, -wall_length / 2), tower_radius)
towers.br_tower = Circle((wall_length / 2, -wall_length / 2), tower_radius)
# Gate
gate = Hole(shift=(0, -1*inches))
castle.gate = gate
gate_shape = Rectangle((0, wall_height / 2), gate_width, gate_height)
gate.shape = gate_shape
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
```
Feel free to further refine and expand upon this basic structure. We can add additional details like crenellations on the walls, more towers, or inner buildings. Let me know how you'd like to proceed or if there are specific features you'd like to add to your castle!
Traceback (most recent call last):
File "/net/projects/ranalab/jz/aidl/AIDL/generation/backend.py", line 21, in dumbrun
exec(code, env)
File "", line 3, in
NameError: name 'inches' is not defined
Ah, I see the problem. It looks like we missed importing the units (`inches`) which are presumably part of the `AIDL` module. We should define units explicitly or ensure we use plain floats.
Let's define `inches` to avoid the error:
```python
from AIDL import *
inch = 25.4 # 1 inch = 25.4 mm
def castle(
wall_length: float = 12*inch,
wall_height: float = 6*inch,
tower_radius: float = 1.5*inch,
gate_width: float = 2*inch,
gate_height: float = 3*inch
):
castle = Solid()
# Main castle walls
walls = Solid()
castle.walls = walls
# Front Wall
walls.front = Rectangle((0, 0), wall_length, wall_height)
# Back Wall
walls.back = Rectangle((0, -wall_length), wall_length, wall_height)
# Left Wall
walls.left = Rectangle((-wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Right Wall
walls.right = Rectangle((wall_length / 2, -wall_length / 2), wall_height, wall_length)
# Towers
towers = Solid()
castle.towers = towers
# Four towers at corners
towers.tl_tower = Circle((-wall_length / 2, wall_length / 2), tower_radius)
towers.tr_tower = Circle((wall_length / 2, wall_length / 2), tower_radius)
towers.bl_tower = Circle((-wall_length / 2, -wall_length / 2), tower_radius)
towers.br_tower = Circle((wall_length / 2, -wall_length / 2), tower_radius)
# Gate
gate = Hole(shift=(0, -1*inch))
castle.gate = gate
gate_shape = Rectangle((0, wall_height / 2), gate_width, gate_height)
gate.shape = gate_shape
return castle
with AIDL_2D:
model = castle()
print(model.Solve())
model.Render()
```
This should fix the `inches` definition, and your model should work properly now. Please try running this updated code. If you need any further refinements or additions to the castle, let me know!
|