vicc blog

株式会社ヴィックの技術ブログです。

ホーホーホー!メリークリスマスそしてよいお年を!Dynamoの周期的実行

もう2023年の12月になりました。もうすぐクリスマスが近づいてきて、多くの方々が忘年会にも参加されるでしょうね。忘年会の雰囲気をもう少し良くしてくれるクリスマスツリーのような装飾品があればいいのではないかと思います。

それで準備しました。 RevitとDynamoを使ってクリスマスツリーに色とりどりのイルミネーションライトをランダムに配置し、明かりが点くように作りましょう。特に、今回は多くの方によくわからないような、あまり使わない、Dynamoの実行バーにある「周期的」という機能を使う予定です。まず完成したイメージを見てみましょう。(図1)

図1 クリスマスツリーのイルミネーションライト

プログラムのバージョン

  • Revit version 2024
  • Dynamo 2.19.3.
  • 利用したパッケージ : spring nodes、Clockwork
  • 🎄クリスマスツリーはRevitCity.comのファミリを使用

Revit上での簡単な準備作業

最初にクリスマスツリーファミリをRevitのプロジェクトにロードします。ツリーとギフトボックスが一体のファミリでしたが今回はツリーとボックスを分けてプロジェクトに入れました。このファミリはRevit上の表示スタイルによってその見え方が違います。(図2)ファミリのマテリアルの設定などがよく設定されているようです。

図2 ツリーとギフトボックスのリアリスティックのベタ塗りvs表示スタイル

クリスマスツリーの一番上にある星の形は、私が簡単に一般モデルテンプレートを用いてファミリーで作成後、ツリーの上に配置しました。(図3)

図3 星の形のファミリ

次はイルミネーションライトファミリです。星ファミリと同様に一般モデルテンプレートを用いて丸型ファミリを作成、以後1つのファミリの中に、7色(青、緑、紫、赤、銀、黄)を個別のタイプに分けて作成しました。(図4)

図4 イルミネーションライトのファミリ

ライトファミリを作し、タイプまで設定した後、このファミリを再び空のファミリに入れて設定したタイプをすぐパラメータ化することができます。(図5) このように各タイプをパラメータ化してプロジェクトの中でファミリを修正する方法もありますが、Dynamoの場合、このようなパラメータの修正に困難があり、今回はこの方法は使用しませんでした。

図5 タイプをパラメータ化したファミリ

Dynamoスクリプトの作成

今回のDynamoスクリプトの流れを要約してみます。

図6 全体のDynamoスクリプト

  1. ツリーをDynamoに読み込んでライトを配置する座標を設定する。
  2. ギフトボックスより下の座標は除去し、座標をそれぞれの角度に合わせてコピーする。(この作業は後ろで細かく説明)
  3. 全ての座標を任意の順序で再整理し、その座標の1割だけ抽出する。
  4. 1割の座標数と同じように7種類のライトを任意に並べるリストを作成
  5. 周期的を使用できる時間ノードを使用して、再整理されたリストを毎秒更新
  6. 毎秒更新された任意の座標と任意のライトのタイプがRevit上に反映

ツリーから座標を生成及び順序を任意にして再整理

Revitをよくご存知の方々は図2でもすでに把握されたと思いますが、実際にツリーは平面で見ると上下左右4方向の面からなるファミリ(図7)です。

図7 面で構成されたツリーファミリ

4方向の角の点から座標を抽出し、上下左右を起点に90度を均等に分けた角度だけコピーすればいいので、コードブロックを使用して90度を4等分してツリーの中心点から22.5°、45°、67.5°に座標をコピーしました。座標コピー作業と同時にDynamoの「List.Shuffle」というノードを使ってリストを項目を任意の順序に変える作業を行い、「if」ノードを通じて毎秒時間が変わるたびにリストの項目がシャッフルされるようにしました。(図8)

図8 座標のコピーと座標順序を任意にする

周期的の機能を設定

周期的の機能を使用するためには必ずDynamoのライブラリから「Input」パネル →「DateTime」カテゴリ →「DateTime.Now」ノードを使用しなければならないです。今回はイルミネーションライトが毎秒位置とライトの色が変わるようにしました。上述のとおりそのためにシャッフルを更新する必要があり、「if」ノードを利用、秒(値)を2で割って残りが1または0であるかを把握し、結果値が「True」と「False」を繰り返すように設定しました。

周期的、このオプションは基本的にグレーで表示され、「DateTime.Now」ノードがワークスペースに配置されて使用される場合にのみ有効になって使用できます。 設定された間隔で自動的に実行されるようにグラフを設定することが可能。

図9 周期的の機能使用するための設定

設定が終わったら、任意の座標が毎秒更新されるかを実際に実行してみましょう。図10を見るとDynamoの実行バーから手動とか自動ではなくて周期的を選択していくと任意の座標が繰り返して更新されるのが確認できます。

図10 任意の座標が毎秒変わっていく

任意の座標が繰り返して更新されるのが確認できまして、実際にファミリをその座標に任意の色のイルミネーションライトが配置できるようにファミリ配置ノードをオンにして周期的を実行します。(図11)

図11 ライトが任意の色で任意の座標に配置される

今回はあまり使われていない機能「周期的」を使ってクリスマスツリーをもう少しおしゃれに飾ってみました。この機能を利用すると、ある構造の何かを組み立て順に見せたり、特定の目的のシミュレーションで活用できるのではないかと思います。下の図12は基礎的なDynamoを練習できる手引書にあるPythonのサンプルを一部修正し、周期的機能を使って作ったものです。

図12 屋根の雨水シミュレーション

2023年にもviccのブログを訪問していただき、BIMに関心や興味を持ってくださった全ての方々に感謝申し上げます。残りの12月のあいだ、最後まで走り抜けよい一年としましょう。

メリークリスマスそしてよいお年を!