download studio_utility_1_0.py studio_utility_1_0.py ユーティリティモジュールを更新しました。 dorpbox に熊谷さんのプロジェクトファイルを置きました。 下記 checkPolyline という関数を使っています。今後配置問題を解決するのに多用すると思われます。 rev_0609_kumagai.3dm, rev_0609_kumagai.gh
Category: GhPython
rhinoscriptsyntaxで生成したオブジェクト
意味がよくわからないかもしれませんが、「rhinoscriptsyntaxで生成したプレビューオブジェクトは、コンポーネントを経る時点で破棄される」とい暗黙の仕様があるようで(おそらくメモリリークを防ぐため、メモリをセーブするため)、その認識が甘かったために昨日の諸々のエラーを誘発していたようです。Rhino.Geometryのデータではなく、rhinoscriptsyntaxやコンポーネントの入力オブジェクトを使う場合は、実行しているコンポーネントに入力する必要がある、、、、、、ということで、コードの書き方、スタイルをすこし変更します。 というところに、毎回 site オブジェクトを入力するようにします。つまり として、毎回 site オブジェクトを入力します。proceess コンポーネントに site 入力ポートをつくります。スタジオモジュールのsetBoundary も とproc関数をコールするごとにセットします。 修正版をdropboxに置きます。他の人も参考にしてください。 rev_150609_shibuya.gh, rev_150609_shibuya.3dm 後に熊谷さんのものもアップします。studio_utility_1_0 も更新します。 ※type hint をオブジェクトにあわせて明示するように変更していましたが、↑に注意すればtype hint はすべて標準の “ghdoc Object when geometry (…” で問題ありません。
Valid Surface を使ってください。
昨日スタジオで使っていた、敷地のサーフェースですが、what コマンドで見ると Geometry: Invalid surface. と出ます。これがsutudio_utility_1_0 モジュールなどでエラーの出る原因のひとつです。dropboxに ”Valid_surface.3dm” を置きましたので、こちらを使うか、Valid surface となるように敷地をモデリングしてください。
選択ノード群の中心ノード
center_node.zip 指定したノード群において、中心となるノードはどのように考えればよいでしょうか。指定ノード群からの分散が最も小さくなるノードを探す場合 mini deviation と 指定ノード群からの距離の合計が基も小さくなる場合 mini-sum のサンプルです。入力点群の最寄が指定ノードとなります。入力ノード群を動かして、どちらが中心ノードに使えそうか試してみてください。 分散の小さいノードを探す 距離の合計が小さいノードを探す
ノードの情報の書き込み graph_1_0
graph_module_betweenness_view_result.zip とりあえずのサンプルです。 write_info モジュールにつながっている Toggle を True にスイッチすると、ノードのパスカウントをRhinoモデルに書き込みます。Grasshopperのプレビューではなく、Rhinoモデルの実体として(ベイクされたものといえばよいでしょうか)書き込まれてしまうため、値が変わるたびに SelText、 Delete などでテクストオブジェクトを消さなければなりません。面倒です。プレビューでダイナミックに変更するやり方、情報求む。
studio_utility_1_0.py 更新(GH-pythonサンプル)
cluster_sample.zip
studio_utility_1_0.py 更新
download studio_utility_1_0.py studio_utility_1_0.py ユーティリティモジュールを更新しました。いくつか機能追加です。クラスタリングの関数がありますが、これはユークリッド距離によるものなので、スタジオで必要な”ネットワーク距離でのクラスタリング”はもう一ひねり必要です。それらは後ほど。 クラスタリングは k-means法(クラスタ数指定)、k-means ++ 法(クラスタ数指定)、ward法(ステップ指定)、ward法(クラスタ数指定) となっています。それぞれググればアルゴリズムは調べられると思います。 Rhino-Pythonでのサンプルコード GH-Pythonでのサンプルはこちら 以下実装関数:
ghpythonlib.componentsをつかってコンポーネント機能をpythonからコール
utility_test2.zip ghpythonlib.componentsをつかってコンポーネント機能をpythonからコールするサンプルです。 スタジオモジュールを併用して内外・干渉判定をしながら点を打ち、その点群からヴォロノイエッジを生成しています。
feedback, step プロセスを行う構成
world_sample_00.gh MAS(マルチエージェントシステム)やひとつの生成結果をフィードバックする現象のモデル化、設計システムを考える場合、コンポーネントを実行するたびに各変数が初期化されるのは困りますし、システム全体であるいは個々のエージェント等が変数の値を保つ必要があります。 まずはクラスなどでプロトタイプを記述し、そのインスタンスを別のコンポーネントに送り、送った側でインスタンスの関数をコールする、という構成で実現することができます。 WorldPlan コンポーネント側 (プロトタイプ宣言とインスタンス生成、インスタンスのポート’a’への送信) クラスの記述方法を説明すべきですが、クラス内部で保つ変数(メンバー変数)は、self. で定義・アクセスします。proc という関数の中に、各設計ステップの処理を書いていきます。siteという入力ポートが暫定でありますが、ここが敷地情報、境界情報、何らかの初期座標、点、などを入力する想定です。 Process コンポーネント側 (インスタンスの受け取り、インスタンス関数の実行) こちらのエディタを開いて、”test”ボタンを押下する度に1ステップ実行されます。 ↓このあたりのサンプルはすべてこの構成です。 MAS基本形 define functions, define prototypes(class) シミュレーション Werner’s Model シミュレーション Reaction-diffusion system 反応拡散系モデル Category Archives: MAS (Multi-Agent System) Category Archives: CA (Cellular Automaton) Percolation
Class 定義 データストラクチャ
world_sample_01.gh まずデータストラクチャ、今後扱っていく情報の構造を設計する必要があります。データをひとまとまりにしておくと便利なものをprototype、クラスというもので定義していきます。おそらくこのサンプルは、シェアハウス、学校のプロジェクトにフィットする形です。後にポストしますが、クラスタリングなどもこのデータストラクチャを基に行います。 Unit というクラスを定義しています。これシェアハウスの場合は住居ユニット、学校の場合は教室、として定義できると思います。このクラス(プロトタイプ)からインスタンス(実体)を作るときに、def __init__(self,xxxxxx) という関数がコールされます。これをよくコンストラクタと呼びますが、ここでこのUnit というデータ構造(まとまり)がどのような情報を格納すべきか self.変数名 として定義しておきます。これをメンバー変数と呼びます。 上のコードではメンバー変数を、コンストラクタの引数 で初期化しています。サンプルの WorldPlanコンポーネントのコード 35 行あたりで、このUnitクラスからインスタンスを作っていますが、 このインスタンス化の際に,id, pos, type = 0, name = “single” といった情報を与えています。 unit_B に関しても実装してみてください。 それから敷地のサーフェース(建設可能範囲)、シェアハウスは3mグリッドのsplit済みのエッジ、このあたりライノでモデリングしてください。可能であればdropboxに置いてくれるとサンプル作りに役立ちます。







