今回は上画像の様な、ねじれたトンネルを作成していこうと思います。難易度はそこまで高くはないですが、データ構造の理解が必須です。データ構造を理解したうえでやっていただいた方がより理解ができるかと思います。こちらのチュートリアルは動画化しておりますので、動画の方がよい方は以下のリンクからどうぞ!
目次
概要

上画像がプログラムの全体像となっております。
各ブロックごとに説明していこうと思います。
基準となる多角形の作成

- Arcコンポーネントで原点を(0,0,0)とした円弧を作成します。今回は半径10m、角度を80度の円弧としました。
- Perp Framesコンポーネントで円弧に沿って等間隔の平面を作成します。今回は67等分しております。ここで接続しているNumber SliderコンポーネントはOdd Numberにして奇数のみが入力できるようにしておきます。
- Polygonコンポーネントで、作成した平面を中心とした多角形を作成します。今回は半径3mの10角形を作成しました。
多角形を回転させる

- Rotateコンポーネントで、作成した多角形を先ほど作成した平面を中心に回転します。
- Rangeコンポーネントで回転角のリストを作成します。ドメインに0度~90度を入力し、Step数は平面を作成した際の分割数を入力します。これで、0度~90度までを67分割した68個の値を含む角度のリストが作成されました。
- Radiansコンポーネントで弧度法に変換します。
- Boundary Surfacesコンポーネントで回転させた多角形にサーフェイスを張ります。

- Scaleコンポーネントを使用し、作成した多角形サーフェイスを中央部に行くにつれて縮小させていきます。
- Areaコンポーネントで多角形の中心を取得しScaleコンポーネントに接続します。
- 縮小倍率のリストを作成します。List Lengthコンポーネントでサーフェイスの数を取得します。
- Divisionコンポーネントで取得したサーフェイスの数を2で割ります。
- Subtractionコンポーネントで1を引きます。
- Rangeコンポーネントで角度のリストを半分作成します。ドメインには1.0倍~0.6倍までを入力し、Step数は先ほど1を引いた数値を入力します。
- Reverse Listコンポーネントで角度リストを反転させます。
- Mergeコンポーネントで作成した角度のリストと反転させたリストを結合します。
- Scaleコンポーネントに結合した角度のリストを接続します。
多角形を切断するための切断線を取得

- XY Planeコンポーネントで(0,0,-1500)を原点としたXY平面を作成します。
- Brep | PlaneコンポーネントでScaleコンポーネントで縮小したサーフェイスと作成した平面との交線を取得します。
サーフェイスを切断

- Scaleコンポーネントで先ほど縮小した多角形を更に縮小します。Areaコンポーネントで求めた各多角形の中心点を基点に0.95倍します。
- Surface Splitコンポーネントで多角形サーフェイスを切断していきます。0.95倍する前と後の多角形サーフェイスを先ほど取得した交線でそれぞれ切断していきます。データ構造を合わせるためにサーフェイスの入力端子をGraftします。
- Entwineコンポーネントで切断した各サーフェイスをまとめます。コンポーネントの下部にFlattenのタブがあるかと思いますが、右クリックでメニューを出し、Flatten Inputsのチェックを外します。
切断したサーフェイスのエッジを取得

- List Itemコンポーネントで0番目を取得することで切断したサーフェイスの片方を取得します。
- Brep Edgeコンポーネントで切断したサーフェイスのエッジを取得します。
- Lengthコンポーネントでエッジの長さを取得します。
- Sort Listコンポーネントで取得したエッジの長さをKeyとしてエッジを短い順にリストを並べ替えます。
- Cull Indexコンポーネントで‐1番目を消去することで、並べ替えたリストの最後の値を消去します。エッジのリストの中から最も長い直線、多角形の一番底の直線を消去しました。
- Join Curvesコンポーネントでエッジを結合します。出力端子はFlattenしておきます。
エッジのリストの整理

- 取得したエッジのリストをPartation Listコンポーネントで外側と内側のエッジを分けます。
- List Lengthコンポーネントでエッジの数量を取得します。
- Divisionコンポーネントで取得したエッジの数を2で割ります。Partation ListコンポーネントのSizeに接続します。
エッジの複製

- Rotate 3Dコンポーネントで取得したエッジを複製します。角度は0.7度、中心点は最初に円弧を作成した際の中心点(0,0,0)、回転軸はZ軸を指定します。先ほどのエッジとエッジの間に更にエッジが複製されたかと思います。
作成したエッジの整理

- Explode TreeコンポーネントでPartation Listコンポーネントから取得できるエッジとRotate 3Dコンポーネントから取得できる複製したエッジをそれぞれ、外側と内側のエッジをそれぞれ取得します。
各エッジ間にサーフェイスを張る

- Ruled Surfaceコンポーネントで各エッジの間にサーフェイスを張ります。
- Mergeコンポーネントで作成したサーフェイスをまとめて完成です。
完成



完成です!変数を変えていろんな形状を試してみてください。よく見かける形状だと思いますので、いろんな方のチュートリアルと比べてながら、より効率よく実装してみてください。