今回はNURBS曲面を3D多角形のパネルに分割して、曲面を構成する各パネルの情報を集計します。
※今回の記事では、前回の記事、第60回「多角形の頂点の角度を求める」にて紹介した多角形の頂点の角度を取得するプログラムを使用します。事前にご一読されることをおすすめします。
まずは分割したいNURBS曲面をあらかじめ図面上に配置しておきます。ここでは次のような少し捻れた面を持つNURBS曲面を使用します。
61-1. 曲面を3D多角形に分割
最初に分割の対象とする曲面を取得します。図面上に配置したNURBS曲面に任意の名前を設定したあと、Nameノードを使用してハンドルを取得します。
3D多角形の分割は取得したNURBS曲面のハンドルに対して、Convert 3D Polysノードを使用します。
Convert 3D Polyでの分割数は「環境設定:回転体の分割数」が影響します。事前に環境設定から分割数を設定した上でプログラムを実行します。
オプション > 環境設定... > 3D > 回転体の分割数
分割数:8
分割数:32
分割数:64
分割数:256
61-2. 3Dベクトルのなす角
前回の記事では2Dの多角形の各頂点の角度を求めました。今回は3D多角形から角度の情報を取得していきます。前回作成したプログラムを複製して現在の図面上に配置しておきます。
前回のプログラムを編集して3Dベクトルのなす角を取得できるようにします。XとYの成分のみ計算している部分にZの成分を追加して計算するように変更します。
ベクトル取得部分
Get XYノードをGet XYZノードに置き換えます。
内積の計算
z1*z2の計算を追加します
ベクトルの大きさの計算
それぞれのベクトルでz^2の計算を追加します。
3D対応ができたら60-1.で曲面を分割して生成したパネルの3D多角形に適用します。Convert 3D Polysノードの結果をGet3Pointラッパーに入力しますが、取得したい3D多角形のハンドルと頂点番号が対応するようにリストの長さを調整して入力します。3D多角形のハンドルを頂点の数だけRepeatすればリストの長さを合わせることができます。
実行すると、3D多角形の頂点の位置に角度の値の文字図形がプロットされます。
動作を確認したところで、今回は角度のプロットを使用しないためCreate Textノードの「ノードを無効化する」のチェックをONにして機能をオフにしておきます。
61-3. レコードの付与
分割したパネルに識別番号と角度および各辺の長さ(ベクトルの大き)の情報をレコードを使用して付与します。レコードを付与することであとで集計しやすくなります。
まずはレコードフォーマットを作成します。Create Fieldノードはレコードフォーマットのフィールドを作成するノードですが、フィールドが属するフォーマットが存在しない場合はフォーマットも同時に作成します。
ここではレコードフォーマット名を「パネルデータ」、フィールド名を「番号」としてCreate Fieldに入力します。
61-3-1. 番号の生成
レコードフィールドに値を入力していきます。まずはパネルを識別する番号を作成します。パネルの分割数を元にSeriesノードで数列を作成します。
Seriesの結果は0始まりの数値のリストとなっています。
番号の場合は数値のままでも不都合はありませんが、後で使いやすいように文字列の値に変換したうえで、レコードフィールドに入力します。
functionノードのf(x)パラメータに「str(x+1)」を設定して、Seriesノードの結果を入力します。
1始まりの数列となり、値は文字列に変換して出力されます。
レコードフィールドへの入力はSet Record Fieldノードを使用します。パネルのハンドルとレコード名、フィールド名、フィールドの値を入力します。
実行すると、パネルの3D多角形にパネルデータレコードが付与され、番号フィールドに番号の値が入力されます。
61-3-2. 辺の長さ
次に、パネルの各辺の長さの情報をレコードに持たせます。辺の長さの値はベクトルAの大きさを利用します。
頂点の数=辺の数だけフィールドが必要になりますので、「辺の長さ+辺の番号」となるようにフィールド名を作成します。辺の番号はGet Vertex Countを元に生成した数列を利用します。
先ほどと同様に「str(x+1)」を設定したfunctionノードを使用して辺の番号の文字を作成したあと「辺の長さ」と結合してフィールド名を作成します。Addノードは加算の機能を持つノードですが、文字列を入力すると文字列同士を結合することができます。
Create FieldノードとSet Record Fieldノードを用意してそれぞれ値を入力します。レコードフォーマット名は「パネルデータ」とします。フィールドタイプは寸法値を示す9番を入力します。
パネルのハンドルは番号と一致させるためにRepeatで作成したハンドルのリストから入力します。
辺の長さはベクトルAの大きさであるsqrtノードの結果を入力します。
このあたりから、ワイヤーの交錯等がどうしても発生してしまいますが割り切ってどんどん繋いでいきます。
実行すると、辺の数だけ長さのフィールドが作成され値が入力されます。
61-3-3. 頂点の角度
最後に頂点の角度の情報を付与します。角度も辺と同様に、頂点の数だけフィールドを用意してそれぞれ入力します。使用するノードも辺の長さと同様で、フィールドタイプは角度を示す10番を入力します。角度の値はRad2Degの結果を持ってきます。
実行してレコードを確認します。ここまでで番号、辺の長さ、角度と必要な情報の付与ができました。
61-4. 集計
分割したパネルの情報をワークシートで集計します。ここではマリオネットではなくレポート機能を使って集計します。
ツールメニュー > レポート > レポートを作成
を選択してレポートを作成の画面を開きます。
画面上部の検索条件設定で、検索条件を「レコード付き図形」「パネルデータ」に設定します。
下部の列設定で、集計条件を「レコード」「パネルデータ」に設定します。
左側のリスト展開表示可能項目一覧から「番号」「辺の長さ〇〇」「頂点の角度〇〇」を選択して「追加 >」ボタンで右の集計項目のリストに追加します。
「カスタムフィールドを追加」ボタンを選択して図形のサムネイルイメージを表示するフィールドを追加します。フィールドの式には次の関数を入力します。
=IMAGE()
フィールドの並び順を調整してOKでレポート作成画面を閉じます。
設定した条件でワークシートが生成されます。図面上の「パネルデータ」レコードが付与されたパネルが一覧で表示され、それぞれ長さと角度の情報を確認することができます。
ワークシートの表示を整えます。任意のセルを右クリックしてコンテキストメニューから「セルの設定」を選択して、数値の表示桁やイメージのビューの向きなどを調整します。
61-5. ラベリング
集計した情報が図面上のどのパネルを指しているのか、パッと分かると便利ですね。作成した識別番号をパネルの上にプロットします。今回はパネルの中央に番号の文字を配置するように位置を調整します。
まずはCreateTextノードで番号の文字図形を作成します。ここでは位置を指定しません。
次に、文字のレイアウトを設定します。Set Text Propertiesノードを使用して垂直方向および水平方向ともに中央に配置するように設定します。
Get Centerで取得したパネルの中央の座標に文字図形を移動します。MoveノードはAbsoluteに設定します。
これでワークシートの情報との対応が分かりやすくなりました。
61-6. おまけ:カラーリング
おまけです。パネルの形状や向きから算出する慣性モーメントを元に色を設定します。
パネルのハンドルをGet 3D Moment Inertiaノードに入力して、x軸、y軸、z軸それぞれの慣性モーメントを求めます。
xの慣性モーメントが大きいほどRの値を大きく、yの慣性モーメントが大きいほどGの値を大きく、zの慣性モーメントが大きいほどRの値を大きく、という設定でRGB値を作成します。RGB値は0〜65535の間で設定します。
作成したRGB値をSet Fillノードに入力してパネルに色を付けます。
実行すると、パネルごとに異なる色で着色されます。
ワークシートを再計算すると、カラーリングも反映されます。
いろいろな形状の曲面で実行してみてください。
この機能を利用できる製品
![]() |
Vectorworks Architect建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品 |
![]() |
Vectorworks Landmark地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品 |
![]() |
Vectorworks Spotlightステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品 |
![]() |
Vectorworks Design Suite専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品 |