YouTubeのチャンネル登録お願いします。

【Rhino】名前の付いたビューをまとめて書き出すコマンドを作ってみた。

みなさん、こんにちは。
今回は、私が業務をしている中であったら便利だな~って思ったコマンドを作ってみたので紹介します。

どんなコマンドが必要なのか

私は普段のモデリングの時に、確認したい位置などを名前の付いたビューとして保存しています。そのビューに対して、独自の表示方法を割り当てており、モデリングが終わりプレゼンテーションを行うために、ViewCaptureToFileを使って書き出しています。

しかし複数枚のパースを書き出すときに、毎回ViewCaptureToFileを打ち込んで、名前を付けて保存をすると意外と時間がかかり困っていました。そこで、独自の表示方法で名前の付いたビューをまとめて書き出すコマンドを創ろうと思いました。

コマンドに必要な機能

上記要求を満たすために、このコマンドに必要な機能を洗い出してみます。

一度、いつものやり方でやってみると、以下のような順番で作業していることがわかりました。

  1. 名前の付いたビューを開く
  2. 表示形式を変更する
  3. ViewCaptureToFile
  4. 解像度を選択
  5. ファイルに名前を付ける

以上を踏まえて必要な機能をあぶりだしてみると以下の機能が必要そうだと目星をつけました。

  • 書き出すビューを選択する機能(複数選択ができるように)
  • 表示形式を変更する機能(一つだけ)
  • 解像度を選択する機能(入力よりもリストで選ぶ)
  • ファイルに名前を付ける(ファイル名_ビュー名.png)

実際にコーディングしてみる

必要要件となんとなくのプロセスが検討付いたので実際にコーディングしていきましょう。
今回はPythonでやるので、コマンドラインにEditPythonScriptを入力して始めます。

コード編集画面が開けたら、新規作成からコマンドを選びます。

コードは以下を打ちこみます。

コピーしました!

BatchNamedViews_cmd.py
import System
import Rhino as rh
import scriptcontext as sc
import rhinoscriptsyntax as rs
__commandname__ = "BatchNamedView" #コマンド名
# RunCommand is the called when the user enters the command name in Rhino.
# The command name is defined by the filname minus "_cmd.py"
def RunCommand( is_interactive ): print __commandname__ fileLocation = rh.RhinoDoc.ActiveDoc.Path fileName = fileLocation.replace(".3dm","") #ファイル名を取得 allNamedViews = rs.NamedViews() #名前のついたビューの一覧を取得 allDisplayModes = rs.ViewDisplayModes() #名前の付いた表示方法を取得 selectedViews = rs.MultiListBox(allNamedViews, "Select views to export.") selectedDisplayMode = rs.ListBox(allDisplayModes, "Select views to export.") resolutionList = ["1,920*1,080", "2,560*1,440", "3,820*2,160", "5,120*2,880"] #解像度のリストを定義 resolution = rs.ListBox(resolutionList, "Select views to export.")
  #解像度に合わせて条件分岐 if(resolution == "1,920*1,080"): for view in selectedViews: rs.Command("-SetDisplayMode" + str(selectedDisplayMode)) saveName = chr(34) + fileName + "_" + view + ".png" +chr(34) rs.Command("-ViewCaptureToFile "+ " _Width 1980 _Height 1080 " + saveName) elif(resolution == "2,560*1,440"): for view in selectedViews: rs.RestoreNamedView(view) rs.Command("-SetDisplayMode" + str(selectedDisplayMode)) saveName = chr(34) + fileName + "_" + view + ".png" +chr(34) rs.Command("-ViewCaptureToFile "+ " _Width 2560 _Height 1440 " + saveName) elif(resolution == "3,820*2,160"): for view in selectedViews: rs.RestoreNamedView(view) rs.Command("-SetDisplayMode" + str(selectedDisplayMode)) saveName = chr(34) + fileName + "_" + view + ".png" +chr(34) rs.Command("-ViewCaptureToFile "+ " _Width 3820 _Height 2160 " + saveName) elif(resolution == "5,120*2,880"): for view in selectedViews: rs.RestoreNamedView(view) rs.Command("-SetDisplayMode" + str(selectedDisplayMode)) saveName = chr(34) + fileName + "_" + view + ".png" +chr(34) rs.Command("-ViewCaptureToFile "+ " _Width 5120 _Height 2880 " + saveName) return 0

コード内部で使われているRhino独自なコマンドを紹介します。

このコードは、rs.NamedViews()の形式で使用します。引数はありません。
今のファイル内部に保存されている「名前の付いたビュー」をarray形式で取得します。
一括で取得するので、indexによってビューを選択できます。

このコードは、rs.RestoreNamedView(ビュー名)の形式で使用します。
引数に指定されたビューを表示するコードです。

このコードは、rs.ViewDisplayModes()の形式で使用します。引数はありません。
今のファイル内部に保存されている表示形式(ex.シェーディングやレンダリングなど)をarray形式で取得します。
一括で取得するので、indexによってビューの名称を選択できます。

このコードは、rs.ListBox(選択肢, "表示する言葉")の形式で使用します。
第一引数に指定された選択肢の中から、1つだけを選択できる対話型ウィンドウが表示されます。
第二引数に指定された文字列がウィンドウ上部に表示されます。

このコードは、rs.MultiListBox(選択肢, "表示する言葉")の形式で使用します。
第一引数に指定された選択肢の中から、複数選択できる対話型ウィンドウが表示されます。
第二引数に指定された文字列がウィンドウ上部に表示されます。

以上のようなコードで、独自の表示方法で名前の付いたビューをまとめて書き出すコマンドBatchNamedViewsを作成することができました。

終わりに

Rhinoの魅力はどんな形態でもモデリングが可能なことだけではなく、コマンドを自作したりと拡張性にも優れていることがあげられます。ぜひこの機会に、EditPythonScriptを使用してみてはいかがでしょうか?

また次回の記事でお会いしましょ~。Tschüss.