
- `segment_length`: float – ジグザグ1区間の長さ
- `segment_count`: int – ジグザグの折れ数(1列あたり)
- `row_count`: int – ジグザグ列の数(X方向の繰り返し数)
- `angle`: float – ジグザグの折れ角度(度数)
- `x_spacing`: float – 各列のX方向の間隔
- `z_drop`: float – 交互にZ方向へ下げる量(立体感の調整)- `results`: list of `Brep` – 折り構造を構成する四角形のサーフェイス群import Rhino.Geometry as rg
import math
results = []
zigzag_base = []
pt = rg.Point3d(0, 0, 0)
dir_angle = math.radians(angle)
direction = 1
for i in range(segment_count + 1):
zigzag_base.append(pt)
angle = direction * dir_angle
dx = math.sin(angle) * segment_length
dy = math.cos(angle) * segment_length
pt = rg.Point3d(pt.X + dx, pt.Y + dy, 0)
direction *= -1
zigzag_rows = []
for j in range(row_count):
dx = j * x_spacing
dz = -z_drop if j % 2 == 1 else 0
row = [rg.Point3d(p.X + dx, p.Y, p.Z + dz) for p in zigzag_base]
zigzag_rows.append(row)
for j in range(row_count - 1):
row_a = zigzag_rows[j]
row_b = zigzag_rows[j + 1]
for i in range(segment_count):
p0 = row_a[i]
p1 = row_a[i + 1]
p2 = row_b[i + 1]
p3 = row_b[i]
face = rg.Brep.CreateFromCornerPoints(p0, p1, p2, p3, 0.001)
results.append(face)ライセンス・利用規約
| 項目 | 可否 | 説明 |
|---|---|---|
| 自身のプロジェクトへの組み込み | ○ | 個人・商用問わず、スクリプトや作品の一部として自由に使えます。 |
| コードの改変・学習利用 | ○ | 自身の学習や、目的に合わせたカスタマイズは大歓迎です。 |
| SNSへのシェア・紹介 | ○ | 作品の画像やURLのシェアは許可不要です。ぜひご紹介ください! |
| 再配布・転載 | × | コードやファイルを丸ごと自身のサイト等でコンテンツとして公開しないでください。 |
| 素材・プログラムとしての転売 | × | 本サイトの内容をそのまま、あるいは微調整のみで有料販売しないでください。 |
| 著作権表示・リンク | 任意 | 必須ではありませんが、引用元としてリンクを貼っていただけると励みになります。 |