自由曲面模型のカットデータを自動生成できるツール作成と紹介! -設計自動化ツール第2弾-

Grasshopper

今回はGrasshopperを用いた、「自由曲面のワッフル構造模型レーザーカットデータ自動レイアウトツール」の紹介です。

何かとても長いですが、とにかく3次曲面の屋根とかを模型で作りたいけど、カットデータの生成が面倒くさいのですぐにレーザーカット出来るようにイラストレーター(以下、イラレ)データにしてくれるものです。

使い方についての説明と、イラレ出力のためのアルゴリズムに用いられているコードを掲載します。

使い方

①作成したい自由曲面形状の単一サーフェスを「Surface」コンポーネントに取り込みます。「Surface」コンポーネントを左クリックで選択し、緑になった状態で右クリックをし、Set one SurfaceでRhino上のサーフェスを選択します。

②次に模型を作るためのワッフル構造の設定をしていきます。パラメータは全部で6つあり、それぞれ説明していきます。

  • 1) ワッフル Xベクトル:「ワッフル Yベクトル」と合わせてワッフル構造のサーフェスに対する方向を決定します。(いじらなくても問題ないです)
    2) ワッフル Yベクトル: 1)とほとんど同じです。ワッフル構造は必ず直交するようになってます。
    3)模型材料 厚み(mm): レーザーカットで出力する模型材料の厚みを設定します。部材同士の切り欠いた部分の大きさに影響します。
    4)span: ワッフル構造の1スパンの距離を設定します。
    5)depth: ワッフル構造のせいを設定します。
    6)縮尺: レーザーカットで出力する模型の縮尺を設定します。

③レイアウトされるカットデータはRhino上の原点(0,0,0)あたりで確認可能です。出力範囲はレーザーカッターの規格の一つである300×600になっています。

④作成するイラレデータのファイル名を設定します。

⑤イラレデータを保存する場所を指定します。「File Path」コンポーネントを左クリックし、緑になった状態で右クリックでSelect a directoryでできます。

⑥「Toggle」コンポーネントをクリックしてFalse → Trueにしてスイッチオンです。これで勝手にイラレデータが作成されてファイルを開きます。イラレデータのアートボードや線の設定などは手動で行います。(そこまで自動化できれば良かったんですが知識不足でした)

アルゴリズムの説明

①サーフェスを垂直に分割してワッフル構造にする方法はチュートリアルなどにもあってたくさん方法があると思いますが、私の場合は「Contour」コンポーネントを用いて等分割しています。

②先ほど作った等分割線をサーフェスとして押し出して、それぞれの交差する交線に厚みを持たせて切り欠きを作っています。

③「Orient」コンポーネントで先ほど作成した部材をXY平面に配置します。

④各部材の最も近い点同士の距離を被らないように近づけることでレイアウトをすることができます。

⑤「Scale」コンポーネントで縮尺に合わせてカットデータを縮小します。

⑥bool入力端子にTrueが入力されると、Rhino上のViewがTopに変更されて出力端子からTrueが出力されるコードです。

import rhinoscriptsyntax as rs
import Rhino as rh
import scriptcontext as sc

sc.doc = rh.RhinoDoc.ActiveDoc

if bool:
    #if the view is already setup correct:
    rs.CurrentView('Top')

    #if you need to restore a named view first:
    rs.RestoreNamedView('named1')
    
    a = True

⑦これは前回の「モデリング自動化ツール その①」で用いた、Bakeを自動化するツールをそのままエクスポートしてくれるようにしたものです。filenameの拡張子を[.ai]にすることでイラレデータを保存します。前回の「モデリング自動化ツール その①」へはこちらから行けます。

  if(export){

      Rhino.DocObjects.Tables.NamedViewTable nvt = Rhino.RhinoDoc.ActiveDoc.NamedViews;
      Rhino.DocObjects.Tables.ViewTable vt = Rhino.RhinoDoc.ActiveDoc.Views;



      Rhino.Display.RhinoView[] rvs = vt.GetViewList(true, false);
      Rhino.Display.RhinoViewport rvp = rvs[1].ActiveViewport;
      rvs[1].Maximized = true;

      {
        var guids = new List<Guid>();

        for(int i = 0; i < geometries.BranchCount; i++){
          for(int n = 0; n < geometries.Branches[i].Count; n++){
            var geom = geometries.Branches[i][n];
            var guid = Rhino.RhinoDoc.ActiveDoc.Objects.Add(geom);
            guids.Add(guid);
          }
        }

        Rhino.RhinoDoc.ActiveDoc.Objects.Select(guids);


        string filepath = Path.Combine(directory, filename);
        string cmd = "_-Export " + "\"" + filepath + "\"" + " _Enter _Enter";

        Rhino.RhinoApp.RunScript(cmd, false);

        Rhino.RhinoDoc.ActiveDoc.Objects.Delete(guids, true);
      }
    }

⑧保存されたイラレデータを開いてくれるコンポーネントです。

import rhinoscriptsyntax as rs
import subprocess
Illustrator = dir
if Run:
 comm = subprocess.Popen(['start',Illustrator], shell = True, stdout=subprocess.PIPE)
 data = comm.communicate()
 
 
 comm.stdout.close()
 comm.wait()

おわりに

今回は3次曲面のレーザーカットデータ自動生成ツールを作成しました。Grasshopper上でのレイアウトまではある程度操作できましたが、イラレデータのアートボードの大きさの設定や、線種、原点を合わせるなどまで出来たら良かったですが、如何せん知識不足なためこれからも勉強に励みたいと思います。

ツールデータのダウンロードはこちらから。

コメント

タイトルとURLをコピーしました