自由制作
GHPython サンドボックス
課題から離れて、自由に形をつくるためのページです。
右のスライダ x・y・z・n が入力、
a・b・c に入れたものがビューポートに描かれます。
スライダは + スライダ で追加、− で削除できます。
出発点をえらぶ
下のどれかを開いて、書き換えながら試してください。
01
白紙から始める
1 点だけ置いたところから。
02
点をグリッド状に並べる
二重ループの基本形。柱やパネルの割付に。
03
螺旋を描く
角度と高さを同時に進める。Polyline で 1 本の曲線に。
04
床を回しながら積む
Plane を回転させて各階の床をつくる。ツイストタワーの原理。
05
2 つの円をロフトする
半径の違う 2 断面をつないで立体に。
使える Rhino.Geometry
このページで実装しているクラスとメソッドの一覧です。
Rhino 本体の Rhino.Geometry の一部をブラウザ用に書き直したもので、
命名と引数の順序は本物に合わせてあります。
| クラス | 使い方 | できること |
|---|---|---|
Point3d | rg.Point3d(x, y, z) | 点。.X .Y .Z、.DistanceTo(p)、引き算でベクトル |
Vector3d | rg.Vector3d(x, y, z) | ベクトル。.Length、.Unitize()、CrossProduct(a, b) |
Plane | rg.Plane.WorldXYrg.Plane(origin, normal) | 平面。.Origin を代入して移動、.PointAt(u, v) |
Interval | rg.Interval(t0, t1) | 区間。矩形やボックスの範囲指定に使う |
Polyline | rg.Polyline(点のリスト) | 折れ線。リストとして扱える。.ToNurbsCurve() |
NurbsCurve | 曲線.ToNurbsCurve() | 曲線。.MakeClosed(tol)、.Length、.IsClosed |
Line | rg.Line(p0, p1) | 線分。.Length、.From、.To、.PointAt(t) |
Circle | rg.Circle(plane, r)rg.Circle(center, r) | 円。.ToNurbsCurve()、.Center、.Radius |
Rectangle3d | rg.Rectangle3d(plane, w, h)rg.Rectangle3d(plane, ix, iy) | 矩形。.Corner(i)、.Center、.Area |
Arc | rg.Arc(circle, angle) | 円弧 |
Extrusion | rg.Extrusion.Create(crv, h, True) | 押し出し。.ToBrep() で立体に |
Brep | rg.Brep.CreateFromLoft([c0, c1], rg.Point3d.Unset, rg.Point3d.Unset, rg.LoftType.Normal, False) | ロフト(リストが返る)。.DuplicateBrep()、.Transform(xf) |
Sphere / Box | rg.Sphere(center, r).ToBrep() | 球・直方体 |
Transform | rg.Transform.Translation(x, y, z)rg.Transform.Rotation(角度, 軸, 中心) | 移動・回転・スケール。ジオメトリ.Transform(xf) で適用 |
出力のきまり
描かれるもの
a / b / c に入れた Point3d・曲線・Brep。リストや辞書に入れても、中身を探して描きます数値や文字列ビューポートには出ませんが、「出力」タブに表示されます
print()「コンソール」タブに出ます。デバッグに使ってください
実行時間5 秒を超えると自動的に打ち切ります
Grasshopper に持っていくときここで書いたコードは、そのまま Rhino の GHPython コンポーネントに貼れます。スライダ名(x, y, z, n)を入力名に、a, b, c を出力名にしてください。ただし本物の Rhino には、ここで実装していないメソッドが山ほどあります——できることは増えるほうなので、心配は要りません。
つまずきやすいところ
- スライダの値は小数です。
range()に渡すときはint(n)と書いてください。 rg.Plane.WorldXYは毎回あたらしい平面を返します。pl = rg.Plane.WorldXYしてからpl.Origin = ...と書けば、 他の平面には影響しません(本物の Rhino と同じ挙動です)。- 閉じた曲線でないと押し出しに蓋がつきません。
MakeClosed(1e-6)を呼んでおきましょう。 - ロフトはリストを返します。
lofts[0]のように取り出してください。