grasshopper addon for tcp connection.
参考: https://developer.rhino3d.com/guides/grasshopper/installing-tools-windows/
-
Visual Studio Community(以下vs、Visual Studio Codeでないので注意)をMicrosoft 公式よりダウンロード
-
ワークロードにおいて、デスクトップとモバイルより「.Netデスクトップ開発」にチェックを入れてインストール。一旦起動。
- Grasshopper アドオン開発用の拡張を追加するために一旦「開始する」の下にある「コードなしで続行」をクリック。 拡張機能>拡張機能の管理を開き、右上の検索より「RhinoCommon and Grasshopper templates for Rhino 7」を検索、ダウンロード。ダウンロード後、vsを閉じるとインストールされる。
以上でこのRepositoryをクローンしたものが利用可能になる。なお、新規にaddonを作成する場合は、以下を行う。
-
vsを起動し、新しいプロジェクトの作成をする際にテンプレートより「Grasshopper Assembly for Rhino 7(C#)」を選択した上で「次へ」をクリック。
-
ダイアログ(次図)にて、作成するAddonに関する情報を入力する。Optionsの「Provide sample code」にチェックを入れると入出力の追加やそこから値を得て処理を行う際の基本的な書き方が分かるようなサンプルのコードが追加されたものが作成される。
なお、ここで設定したコンポーネント名などはComponent class name.cs(ここではNyGrasshopperAssemblyComponent.cs)からでも変更できる(次図)。
- Rhinoを開き、次のコマンドを実行する
GrasshopperDeveloperSettings
- 次図のようなダイアログが開くので、「Add Folder」より「soluton dir>bin」を追加する。これでここにあるaddon(.ghaファイル)が読み込まれるようになる
-
vsにてプロジェクト(ソリューション: .sln)を開き実装を行う。主に編集するのは下記。
RegisterInputParams
入力の定義RegisterOutputParams
出力の定義SolveInstance
動作のの定義
-
デバックの開始(次図)するとRhinoが立ち上がるのでGrasshopperを開く。
- sample.ghは次図のように10個の三次元の点(三次元点群)を送信することになっている。
- runのToggleをTrueにすると、この段階では送信された値を受け取るサーバーが起きていないのでc_statより以下のエラーが表示される。
connection err: System.Net.Sockets.SocketException (0x80004005): 対象のコンピューターによって拒否されたため、接続できませんでした。 127.0.0.1:3141 場所 System.Net.Sockets.TcpClient..ctor(String hostname, Int32 port) 場所 TCPCli.Communicate(Byte[]& sendData, Byte[]& rcvData)
-
サーバープログラムであるsvr_test.pyを実行すると、三次元点群の平均がCallbackのfuncにて計算されて返送される。
-
GHにてToggleをTrueにし直すと次図のようにsvr_test.pyでの計算結果が受け取れているのが確認できる。
- アドオン側に変更を加えた場合は、次図のようにホットリロードを行うとGH上のコンポーネントを更新できる。
- 他者にアドオンを配布する際は.gha含め必要なものを渡し、special folders>component folderに配置してもらうことになると思われる。このあたりの作法は未調査。