久々のGrasshopperネタを投稿してみます。
車のモデリングデータは数多くのサーフェスで構成されているので、複数のサーフェスにまたがってパターンを配置したい場合が出てきます。
平面であれば、新たに一枚のみのサーフェスに張りなおしても、ほぼ誤差のない状態でパターンを配置できるんですが、車のボディーとかシートみたいな、複雑な自由曲面で構成されているところはそれが難しいので、なるべく元のサーフェスを維持したまま配置したいところ。
そんなわけで、今回はこんなやり方をしてみました。もっとこうしたほうがいいよ、みたいなアイデアがあればぜひ、共有させてください。
Step.1 まずは適当なサーフェスを用意
・サーフェスを複数、用意します。形はお好みです。
・サーフェス自体はトリム、アントリムどちらでも大丈夫ですが、結合コマンドを実行したとき1枚のポリサーフェスになるよう、各エッジは指定の誤差の範囲内であることが条件です。
Step.2 用意したサーフェスを1枚化したものを新たに用意
・Step.1で用意したサーフェスに対し、1枚にくっつけた物を追加で用意します。
・アントリムサーフェスであれば、RhinoでMergesrfコマンドを使うとマージされて1枚にまとまります。トリムサーフェスの場合はそれが使えませんので、新しく構成カーブを作ってサーフェスをLoftもしくはNetwork srfコマンドを使って張りなおします。
・後の工程で、元の3枚のサーフェスに戻しますので、ここで作る1枚面は多少は誤差があっても影響はありません。
Step.3 1枚化したサーフェスをXY平面上に展開
・Step.2で作った1枚面に対し、Rhinoのコマンド欄でSquishを実行し、XY平面上に展開サーフェスを作ります。上の図の左側がそれです。
Step.4 展開したサーフェスを張り直し
・Step.3で展開したサーフェスはトリムされた状態のため、エッジを抽出し、LoftあるいはNetwork srfを使ってサーフェスを張りなおします。元の展開サーフェスは捨てて大丈夫です。
Step.5 パターン配置範囲を求める(任意)
・展開したサーフェスに目一杯配置する場合はこの工程はスルーしてください。範囲を少し狭めたい場合は、上の図のように新しくサーフェスを用意します。
Step.6 パターンを2Dサーフェスに配置
・Step.5で作成したパターン配置用のサーフェスを取り込み、Lunch BoxプラグインのDiamonds Panelを使ってひし形を配置します。Offset on Srfを使ってオフセット曲線を取り出しつつ、中心点も同時に求めておきます。
Step.7 3Dサーフェス(近似面)にマッピング
・Step.6で作成したひし形カーブと中心点を、3Dサーフェスにマッピングします。
・上のノード内で3D近似面と記載している取り込み端子は、Step.2で用意した1枚サーフェスのことです。
・ひし形のカーブはフィレットをかけたうえで、Explodeを使って計8つの辺に分解し、Rebuild Curveを使って3次曲線に変更しています。
・中心点のマッピングは、ノード下側の組み方が簡単かなと思います。
Step.8 元のサーフェス上の点と法線ベクトルを求める
・Step.7で求めた中心点は、あくまで1枚化したサーフェス上のものであり、元の3枚のサーフェス上にはない状態です。そこで、上の図のようにノードを組み、元のサーフェス上の中心点と、その点における法線ベクトルを求めます。
・考え方としては、マッピングした各点と3枚のサーフェスとの最短距離を求め、距離でソートをした上で距離が最も短くなる点を選ぶというものです。
Step.9 元のサーフェスに投影する
・いよいよ投影に移ります。
・投影先は、3枚の元のサーフェスを取り込み、Brep joinで1枚のポリサーフェスにします。
PanelでOpne Brepが一つだけの状態であればokです。複数のOpen brepが出来ている場合はエッジ同志の誤差が大きく1枚とみなされていないため、Step.1に戻って精度を上げてみましょう。
・後の工程で階層合わせが必要なため、Path Mapperを使って階層の深さを1段浅くしていますが、ここはケースバイケースなので、各自の階層を見て調整してください。
Step.10 凸サーフェスを作る
・これまでに作ってきたノードを上の図のように組み合わせて、凸形状を作ります。
・中心点を法線ベクトルに沿って10mm移動させ、投影した曲線の端点との間に直線を結んで3D化しています。
Step.11 穴をあけるための切断形状を作る
・この後の工程でサーフェスに穴をあけるための切断形状を作ります。ついでに、リストの長さも取り出します。
Step.12 サーフェスの穴あけ加工
・今回は3枚のサーフェスをBrep joinで合体させたbrepを加工するので、Split Brepを使います。
・ただし、このSplit Brepの使い勝手が悪く、まとめて穴開けするのができないため、Anemoneというプラグインを使ってループ処理を組み込みます。
※Pythonが組める人はそちらでもOKです。
・処理速度があまり早くないので、完了まで少々時間がかかります。普段はEnableをOFFにしておいたほうがいいです。
・Loop StartのExpression欄は数合わせのためx-1を入力します。
以上で完了です!
0 件のコメント:
コメントを投稿