38 lines
1,014 B
Python
38 lines
1,014 B
Python
# BIMR example : curved.py
|
|
import random
|
|
random.seed(128)
|
|
|
|
# Control points
|
|
BASE = [(-1500,-300),(0,1000),(850,800),(300,0),(500,-800),(0,-1000),(-500,-800),(-300,0)]
|
|
N_LEVELS = 8
|
|
N_FRAMES = 40
|
|
FRAME_H = 180
|
|
FRAME_D = 35
|
|
FRAME_T = 10
|
|
SLAB_T = 150
|
|
LEVEL_H = FRAME_H + 2 * SLAB_T
|
|
|
|
for lvl in range(N_LEVELS):
|
|
z_bot = lvl * LEVEL_H
|
|
z_ceil = z_bot + FRAME_H + SLAB_T
|
|
|
|
pts_xy = [(bx + int(random.uniform(-150, 150)),
|
|
by + int(random.uniform(-150, 150)))
|
|
for bx, by in BASE]
|
|
|
|
c = Curve([Point(x, y, z_bot) for x, y in pts_xy])
|
|
|
|
# Floor slab
|
|
Slab(c, SLAB_T, z_bot)
|
|
|
|
# Facade frames
|
|
arc = CurveLen(c)
|
|
fw = max(50, min(300, int(arc / N_FRAMES)))
|
|
div = list(Divide(c, N_FRAMES))
|
|
for i, pt in enumerate(div):
|
|
nxt = div[(i + 1) % N_FRAMES]
|
|
Frame(pt, (nxt.x - pt.x, nxt.y - pt.y, 0), fw, FRAME_H, FRAME_D, FRAME_T)
|
|
|
|
# Ceiling slab
|
|
c_ceil = Curve([Point(x, y, z_ceil) for x, y in pts_xy])
|
|
Slab(c_ceil, SLAB_T, z_ceil)
|