Q100497: データ損失を避けるために Katana で自動保存スクリプトを設定する方法


まとめ

Katanaでプロジェクトを設定する際は、データと時間の損失を防ぐために、進行中の保存が不可欠です。Katana Katanaは自動保存機能が組み込まれており、一定の時間またはアクション後にクラッシュファイルのバックアップを保存します。

クラッシュセーブの詳細については、 Katanaユーザーガイドの「自動セーブ」を参照してください。

この記事では、自動保存スクリプトを設定する方法について説明します。このスクリプトを使用すると、自動保存機能のデフォルトの動作である、自動的に生成されたファイル名を持つKatanaの一時ディレクトリではなく、カスタムの命名規則を使用してカスタムの場所に保存できます。

詳細情報

Katana Katana Python API 内のKatana File モジュールを通じてプロジェクト ファイルを保存します。

Katana File.Save( path/to/location/file.katana )を呼び出すと、選択したファイル名を使用して、現在のKatanaプロジェクトが選択した場所に保存されます。

Katana File.CrashSave()を呼び出すと、現在のKatanaプロジェクトのクラッシュ ファイルが自動生成された名前で一時ディレクトリに保存され、そこからKatanaクラッシュ ファイル セレクターを使用して復元できるようになります。

自動保存ファイルの復元の詳細については、次の記事を参照してください: Q100450: クラッシュ後に自動保存ファイルを見つけて復元する方法

上記の関数を使用すると、指定された時間間隔でKatanaプロジェクトを自動的に保存する Python スクリプトを作成できます。

Katanaファイルモジュールの詳細については、 Katana開発者ガイドの「 プロジェクトの操作」を参照してください。

サンプルスクリプト

この記事には Python の例が添付されており、ダウンロードして必要に応じて変更できます。

例をダウンロードし、ファイルを.katana\UIPluginsフォルダーに移動します。

例えば:

Windows: C:\Users\USERNAME\.katana\UIPlugins\autosaveProject.py
Linux: /mnt/nethome/users/USERNAME/.katana/UIPlugins/autosaveProject.py

ファイルが UIPlugins フォルダーに追加されると、 Katana起動時にファイルを読み込んで実行します。

スクリプトの使用

このスクリプトには、 saveOption 変数を設定することで選択できる3つのオプションがあります。さらに、保存間隔を指定するオプションもあり、このサンプルスクリプトでは現在60000ミリ秒(60秒)に設定されています。

以下のオプションを確認してください。

オプション0: クラッシュ時の自動保存を強制する

このオプションを使用すると、Python を通じて新しい CrashSave を強制できます。

Katanaはクラッシュ時の自動保存機能が組み込まれていますが、この機能は Python で関数を実行する前に設定する場合に役立ちます。

オプション1: 現在のプロジェクトファイルを上書き保存する

このオプションを使用すると、現在のプロジェクトが新しい保存で上書きされます。

Katanaプロジェクトが変更された場合にのみファイルを保存します。

オプション2: ファイルを指定した場所に保存する

このオプションはオプション 1 と同じように機能しますが、ディレクトリの場所と名前を選択できます。

希望する保存場所を追加するには、スクリプトを変更する必要があります。

さらに、起動時に自動保存ファイルをチェックするツールを作成する必要があります。

from Katana import QtCore, NodegraphAPI, Katana File
import os

# VARIABLES

# Set your save option
saveOption = 2

# Set delay interval for autosaves
# function argument is the interval in milliseconds (60 seconds in this example)
autosaveDelay = 60000

def saveAndSubmit():
''' Autosaves project with option specified by user '''

# Get path variables
projectPath = NodegraphAPI.NodegraphGlobals.GetProjectFile()
projectFile = os.path.basename(projectPath)
projectDir = os.path.dirname(projectPath)

# OPTION 0
# Q100450: Locating a crash autosave file - https://support.foundry.com/hc/en-us/articles/360000024960
# Save a crash file (standard autosave):
if saveOption == 0:
KatanaFile.CrashSave(True)

# Check if file has been saved atleast once.
if projectPath != '':
# Check if file has been modified since last save
if Katana File.IsFileDirty():

# OPTION 1
# to save file at the current location use:
if saveOption == 1:
KatanaFile.Save(projectPath)

print ("File autosaved to: " + projectPath)

# OPTION 2
# to save at a specified location use:
if saveOption == 2:
customNameFile = 1 # If you want to use a different project name change the customNameFile = 0
customprojectFile = projectFile #Overwrites the active save with any changes (only happens if customNameFile is not 0
# Custom folder directory for Option 2
customFolderDirectory = '/home/userName/Downloads/customFolder/'

if customNameFile == 0:
customprojectFile = 'CustomFileName' # If customNameFile is 0 then you can change CustomFileName for whatever name you want the file to be save as

KatanaFile.Save(customFolderDirectory + customprojectFile)
print ("File autosaved to: " + customFolderDirectory + customprojectFile)

timer = QtCore.QTimer()
timer.timeout.connect(saveAndSubmit)
timer.start(autosaveDelay)

スクリプトの説明

このスクリプトは、タイマーループを実現するためにQtCore.QTimer()呼び出しを使用しています。QTimerを使用すると、バックグラウンド関数はスクリプトの関数を実行する前に一定時間待機することができます。

指定された時間が経過するたびに ( autosaveDelay変数によって決定されます)、タイマーはsaveAndSubmit()関数を実行します。

saveAndSubmit()関数の定義内にはsaveOption変数で切り替え可能な 3 つのオプションがあります

選択したオプションに応じて、スクリプトは crashSave として保存されるか、現在のKatanaファイルに上書き保存されるか、新しい場所に保存されます。

オプション1と2は、まずKatana File.IsFileDirty()という別の関数の結果を確認しますこの関数は、前回の保存以降にプロジェクトが変更されたかどうかをKatana確認し、変更されていない場合はKatanaによる継続的な保存を停止します。

Katanaの自動保存機能の詳細については、 Katana開発者ガイドを参照してください。

添付ファイル

私たちはそれを聞いて申し訳ございません

理由をお聞かせください