PyPython で学ぶ建築デザインブラウザだけで動く GHPython 演習環境
自由制作

GHPython サンドボックス

白紙のコンポーネントAPI リファレンス

課題から離れて、自由に形をつくるためのページです。 右のスライダ xyzn が入力、 abc に入れたものがビューポートに描かれます。 スライダは + スライダ で追加、 で削除できます。

出発点をえらぶ

下のどれかを開いて、書き換えながら試してください。

使える Rhino.Geometry

このページで実装しているクラスとメソッドの一覧です。 Rhino 本体の Rhino.Geometry の一部をブラウザ用に書き直したもので、 命名と引数の順序は本物に合わせてあります。

クラス使い方できること
Point3drg.Point3d(x, y, z)点。.X .Y .Z.DistanceTo(p)、引き算でベクトル
Vector3drg.Vector3d(x, y, z)ベクトル。.Length.Unitize()CrossProduct(a, b)
Planerg.Plane.WorldXY
rg.Plane(origin, normal)
平面。.Origin を代入して移動、.PointAt(u, v)
Intervalrg.Interval(t0, t1)区間。矩形やボックスの範囲指定に使う
Polylinerg.Polyline(点のリスト)折れ線。リストとして扱える。.ToNurbsCurve()
NurbsCurve曲線.ToNurbsCurve()曲線。.MakeClosed(tol).Length.IsClosed
Linerg.Line(p0, p1)線分。.Length.From.To.PointAt(t)
Circlerg.Circle(plane, r)
rg.Circle(center, r)
円。.ToNurbsCurve().Center.Radius
Rectangle3drg.Rectangle3d(plane, w, h)
rg.Rectangle3d(plane, ix, iy)
矩形。.Corner(i).Center.Area
Arcrg.Arc(circle, angle)円弧
Extrusionrg.Extrusion.Create(crv, h, True)押し出し。.ToBrep() で立体に
Breprg.Brep.CreateFromLoft([c0, c1], rg.Point3d.Unset, rg.Point3d.Unset, rg.LoftType.Normal, False)ロフト(リストが返る)。.DuplicateBrep().Transform(xf)
Sphere / Boxrg.Sphere(center, r).ToBrep()球・直方体
Transformrg.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] のように取り出してください。