マリオネット・スクリプト解説講座

新着記事第58回「マリオネットでファイル入出力」

ArchitectLandmarkSpotlightDesigner

マリオネットでファイルの入出力を実行するノードを使用して、クラス情報を外部のテキストファイルに読み込み/書き出しする方法を解説します。

58-1. ファイル入出力のノード

Manipulate Fileノードは、指定したパスのファイルを開いてデータの読み込みや書き込みを行うためのノードです。

ファイルの読み込みを行うのか、また書き込みを行うのかは、ノードのread/writeパラメータから選択します。

    • read:ファイルからデータを読み込みます
    • write:ファイルにデータを書き込みます(既にデータが存在する場合は削除されます。)
    • append:ファイルにデータを追記します(既にデータが存在する場合でも削除されず、続きから書き込みます。)

58-2. ファイルの読み込み

Manipulate Fileノードを使用して、デスクトップに保存したテキストファイルを読み込んでみます。

/Users/ユーザー名/Desktop/test.txt(※ macOSの場合)

まずは、read/writeパラメータをreadに設定します。

sFilePathポートにファイルパスの文字列を入力します。読み込みの場合はlistLinesInポートの入力は使用しません。listLinesOutポートは、読み込みの場合のみ使用し、ファイルから読み込んだデータを取得します。

 

テキストファイル内のデータを取得できました。

Manipulate FileノードのbyLineのチェックをONにすると、改行ごとに分割された文字列データを取得できます。

※ テキストファイルのデータに日本語の文字列を含む場合、文字コードのエラーが発生する場合があります。
この場合、Manipulateノード内の記述を一部修正することで回避することができます。

1.スクリプト編集...
2.1行のREADONLYREFFILEの記述を含む行を削除

3.50行目の記述を次の通り修正
file = open(fullpath, status, encoding='utf-8')


4.ダイアログOKボタンで編集画面を閉じる

58-3. ファイルの書き込み

次に書き込みを行います。read/writeパラメータをwriteに設定します。

listLinesInポートに書き込むデータを入力します。

実行すると、デスクトップに保存されたテキストファイルに書き込みが行われます。

複数のデータを書き込みする場合、listLinesInポートにデータのリストを入力しても要素ごとに改行されずに1行に連結したデータで出力されます。

この場合、データの末尾に改行コードを追加することで、要素ごとに改行されたデータを出力できます。データのリストをfunctionノードに入力して、evalフィールドに次のように処理を記述します。

str(x)+'\n'

実行するとデータが要素ごとに改行されて出力されます。

最後に上書きです。read/writeパラメータをappendに設定します。

元のデータを残したまま、新しいデータをファイルに追記します。

58-4. クラス一覧の取得

ファイルの入出力に使用するクラスのデータを作成します。

Get Class Listノードは指定した番号のクラスの名前を取得することができます。一覧で取得できそうな名前のノードですが、このノードはクラスの一覧から指定した一つのクラスを取得するものです。

今回実装するのは「Get Class Countノードで取得したクラスの数だけGet Class Listノードを繰り返すことで、クラスの一覧を取得する。」という方法ですSeriesノードでクラスの番号を数列化して繰り返し処理を再現しています。クラスの番号は0ではなく1から始まる点に注意してください。

クラスの一覧を取得できました。

58-5. クラスの作成

クラスを作成にはCreate Classノードを使用します。

sNameポートに入力した名前のクラスが作成されます。

クラスの名前に”-(ハイフン)”を含めると、入れ子のクラスを作成することができます。

58-6. クラスの保存・読み込み

取得したクラスの一覧の情報を外部のファイルに一旦保存して、別のファイルに読み込むプログラムを作成します。

効果を実感できるようにクラスが多数登録されているファイルを使用します。

まずはクラスの一覧の保存です。

58-4.で作成したクラス一覧の取得のプログラムと、58-2.で作成作成したデータのリストの書き出しのプログラムを接続します。

実行すると、テキストファイルにクラスの一覧が出力されます。

次に、データの読み込みです。新規ファイルを開きます。

readに設定したManipulate Fileノードを配置します。byLineパラメータはONにしておきます。

テキストファイルのパスを入力しますが、ここでは、固定のパスではなく実行のたびにファイルを選択できる仕組みにします。

Anyノードを配置してevalに次の通り記述します。

vs.GetFile()

このAnyノードをsFilePathポートにに接続することで、実行時にファイル選択ダイアログが表示され、選択したファイルのパスを取得することができます。

listLinesOutポートの出力をCreate Classノードに接続して、クラス読み込みプログラムは完成です。

実行すると、アクティブファイルにテキストファイルに保存されたデータと同じ名前のクラスが作成されます。

58-7. メニューコマンド化

作成したクラスの保存と読み込みのプログラムを、使い勝手がいいようにメニューコマンドに変換します。

それぞれラッパーノードに変換し、コンテキストメニューから メニューコマンドに変換… を実行します。

それぞれメニューコマンドの名前を入力します。

登録が完了すると、作業画面ツール > マリオネットコマンド に保存と読み込みのコマンドが表示されるようになります。

この機能を利用できる製品

Architect

Vectorworks Architect

建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品
詳細情報 購入ページ

Landmark

Vectorworks Landmark

地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品
詳細情報 購入ページ

Spotlight

Vectorworks Spotlight

ステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品
詳細情報 購入ページ

Designer

Vectorworks Design Suite

専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品
詳細情報 購入ページ