CLI から Rhino を操作する – vicc blog

建設・設計分野の BIM 担当者にとって、設計変更への適宜の対応やデータ統合、データ出力など定型的な作業の効率化は重要なテーマです。
これまでも Grasshopper や Elefront を起点とした自動化手法について何度か紹介してきましたが今回は新機軸です。
新たな手法の確立を目指し「Rhino をコマンドライン(CLI)から操作する」という技術の検証を行いました。この記事ではその結果と、BIM 業務における応用可能性を紹介します。

Rhino の自動化手法

RhinoPython

Rhino には RhinoPython という仕組みがあり、Rhino の内部で Python スクリプトを実行できます。複雑な処理を記述できる一方で、基本的にはユーザーが Rhino を起動した上で操作する必要があります。

CLI(コマンドラインインターフェース)から操作する

一方で、Windows のコマンドラインから Rhino を直接起動し、コマンドやスクリプトを渡す方法があります。
これにより、Rhino の起動・終了・処理の実行を外部から制御できます。公式ドキュメントでも、バッチ処理やレンダーファームでの利用が紹介されています。

  • Running Rhino from the Command Line

RhinoCode(Rhino 8 以降)

Rhino 8 では新たに RhinoCode が導入され、外部制御やプラグイン作成がさらに柔軟になります。できることは多そうですが今回の調査ではいったん調査対象外とします。

  • RhinoCode Command Line Interface

今回の記事では、公式ドキュメントでバッチ処理やレンダーファームでの利用に使えると紹介されているCLI(コマンドラインインターフェース)から操作することについて、既に報告されているバッチ処理に代わる新たな可能性があるのではないかと考え調査します。

検証

検証環境

  • OS: Windows 11
  • Rhino: Rhino 7
  • 実行環境: Command Prompt

※Powershell ではコマンドの渡し方が違うようです。今回は Command Prompt で検証しました。

検証① 基本操作

CLI から Rhino を起動し、図形を描画 → 保存 → 終了までを確認しました。

"C:\Program Files\Rhino 7\System\Rhino.exe" /nosplash /runscript="_-Rect 0,0,0 100,100,0 _-Save ""C:\Users\naoki yoshioka\Desktop\test.3dm"" _-Exit"

↑ Rhino や保存先のパスは適宜変更してください。

/nosplash というオプションを渡すことで、テンプレート選択の画面を無しで起動します。特に意図がなければこちらで大丈夫だと思います。

これだけの操作ですが、すでにコマンドはちょっと長いです。マクロの様な貧相な構文だけで様々なことを実装するのはしんどいです。

Command Prompt

四角形

検証② RhinoPython との組み合わせ

複雑な処理は RhinoPython に記述し、それを CLI から呼び出すという作戦に変えます。

"C:\Program Files\Rhino 7\System\Rhino.exe" /nosplash /runscript="_-RunPythonScript ""C:\Users\naoki yoshioka\Desktop\python_test.py"" _-Exit"

RhinoPyhon: 四角形を描画 → レイヤー変更 → 現在時刻を取得しそれをファイル名に保存。

import datetime

import rhinoscriptsyntax as rs


rs.Command("-New \"Large Objects - Millimeters.3dm\"")


for i in xrange(20):
    print(i)
    rs.AddRectangle(rs.WorldXYPlane(), (i+1)*10.0, (i+1)*10.0)


layer_name = "NEW"
rs.AddLayer(layer_name, [0, 127, 255])


objs = rs.AllObjects()
for obj in objs:
    rs.ObjectLayer(obj, layer_name)


dt_now = datetime.datetime.now()
dt_now_format = dt_now.strftime('%Y%m%d_%H%M%S')
print(dt_now_format)


path_desktop = "C:\\Users\\naoki yoshioka\\Desktop\\"
rs.Command("_-Save \"{}\\{}.3dm\"".format(path_desktop, dt_now_format))

こちら問題なく動作しました。作戦通り、ロジックの記述は RhinoPython で書くことが出来ました。

四角形が複数

検証③ バッチファイル化

CLI コマンドを バッチファイル(*.cmd / .bat)として、ダブルクリックで実行可能にしました。

↓ の様なアイコンが作成され、ダブルクリックで Rhino が立ち上がりRhinoPython が実行され、処理が終わると処理が終了します。

以下を、メモ帳などに保存して拡張子を付けて保存します。

@echo off
"C:\Program Files\Rhino 7\System\Rhino.exe" /nosplash /runscript="_-RunPythonScript ""C:\Users\naoki yoshioka\Desktop\python_test.py"" _-Exit"

アプリを起動するときと同じ様な形で、自動で Rhino が起動し該当の処理が実行され Rhino が終了するという挙動となり、タスクスケジューラなどの発火機能と組み合わせることで夜間や週次での定期処理や変更があった際に自動で追従し変更をかけるという操作も自動化できると考えています。

検証で得られた知見

今回の検証を通じて、以下のことが確認できました。

  • CLI を通じて Rhino を外部から操作できることを実証
  • RhinoPython を組み合わせることで、業務に即した複雑な処理も自動化可能
  • バッチファイル化により、コマンドを打たなくても簡単に実行できる仕組みを構築できた

逆にまだ出来てない検証としては、複数の Rhino ファイルを順次 Rhino で開いて編集して Rhino を落とす。また Rhino を開いて編集して落とすといった処理に関しては、コードをもう少し書かなければいけないので検証できていません。

今後に向けての BIM 業務での応用シナリオ

この技術は、日常的な BIM 業務において以下のような応用が期待できます。

  • 変更に対しての自動更新 → 外部の変更をキャッチしデータを自動で更新する
  • モデルの定期的な IFC / CSV 出力 → BIM 360 や Box への夜間自動保存
  • 複数案件の一括処理 → 深夜にチェックモデルを生成し、翌朝すぐに確認可能
  • レンダリングや数量算出の自動化 → 夜間バッチ実行で日中は設計業務に集中

まとめ

今回の検証により、Rhino を CLI から制御し、それに RhinoPython を組み合わせることで、自動化の基盤を構築できることを確認しました。
バッチ処理や夜間定期実行といったワークフローに組み込むことで、BIM 業務の効率化に直結する実用的な応用が見えてきました。機会があればこれらの展開例を紹介しようと思います。

(終わり)




元の記事を確認する

関連記事