Day 12
(3)
タイルパターン - 対角三角タイル
#pattern#triangle#3d#grid

✅ Inputs
- tile_size: float – タイルの一辺のサイズ(正方形)
- height: float – 押し出す高さ
- rows: int – タイルの行数(縦方向)
- cols: int – タイルの列数(横方向)
✅ Outputs
- results: list of Brep – 押し出された三角タイルの立体ブロック群(全体パターン)
✅ Code
import Rhino.Geometry as rg
import random
import math
results = []
def create_triangle_tile(base_x, base_y, rotation_deg):
# タイルの四隅を定義
pt0 = rg.Point3d(0, 0, 0)
pt1 = rg.Point3d(tile_size, 0, 0)
pt2 = rg.Point3d(tile_size, tile_size, 0)
pt3 = rg.Point3d(0, tile_size, 0)
# 対角で分けた三角形2種
triangle_A = [pt0, pt2, pt3]
triangle_B = [pt0, pt1, pt2]
verts = random.choice([triangle_A, triangle_B])
# 三角形Polyline → Curve化
polyline = rg.Polyline(verts + [verts[0]]) # 閉じる
curve = polyline.ToNurbsCurve()
# Extrusion作成(cap付き)
solid = rg.Extrusion.Create(curve, height, True)
# 平行移動&回転
center = rg.Point3d(base_x + tile_size / 2, base_y + tile_size / 2, 0)
move = rg.Transform.Translation(base_x, base_y, 0)
rotate = rg.Transform.Rotation(math.radians(rotation_deg), center)
solid.Transform(move)
solid.Transform(rotate)
results.append(solid)
# グリッド配置
for row in range(rows):
for col in range(cols):
x = col * tile_size
y = row * tile_size
rotation = random.choice([0, 90])
create_triangle_tile(x, y, rotation)