Maya API の廃止

非推奨のマーキング システムの更新

Maya 2018 以降では、OPENMAYA_DEPRECATED C++ アトリビュートを使用して非推奨のメソッドをマークする必要があります。例:

OPENMAYA_DEPRECATED(version, "message")

マークされたメソッドが呼び出されると、コンパイラに関する警告がマーキング システムによって生成されます。これにより、都合のいいときにプラグインから非推奨メソッドを除去することができます。このような警告の例:

警告 C4996: 'MPxTransform::validateAndSetValue': 代わりに validateAndSetValue(const MPlug&, const MDataHandle&) をオーバーライドしてください。 必要に応じて、MDGContext::current() を使用してコンテキストを取得してください。

コンパイラで警告をエラーとして扱う(treat warning as error)が有効になっていて、移行中に関連する構築エラーが発生した場合は、非推奨の警告を無効にすることができます。

非推奨の警告を非表示にするには、次の操作を実行します。

非推奨をエラーとして扱うには、次の操作を実行します。

廃止されたメソッドの下位互換性

次の例では、getMatrix()getMatrix(const MDGContext&) の両方に対する関数の呼び出しが既定で有効になります(オーバーライドされたメソッドからの API 呼び出しは除く)。詳細については、以下の「非推奨メソッドをオーバーライドする」を参照してください。

class MPxTransform { 
    public: 
        virtual MMatrix getMatrix(); // New api, default to redirect the call to the old method 
    obsolete_2018:  
    OPENMAYA_DEPRECATED(2018, "Call getMatrix(MStatus*) instead.”) 
        virtual MMatrix getMatrix(const MDGContext&); 
} 

非推奨メソッドをオーバーライドする

新しい API と非推奨の API をオーバーライドする場合は、いずれかをオーバーライドすることができますが、両方をオーバーライドすることはできません。新しい API のオーバーライドから非推奨の API を呼び出さないでください(逆も同様)。

以下の例を参照してください。

  • 新しい API をオーバーライドするには:
    class UserTransform : public MPxTransform {
        MMatrix getMatrix() override;
    };
    
  • 非推奨の API をオーバーライドするには:
    class UserTransform: public MPxTransform {
        MMatrix getMatrix(const MDGContext&) override; // deprecated
    };
  • 1 つの継承階層内にある両方の API をオーバーライドしないでください。
    class UserTransform: public MPxTransform { 
        MMatrix getMatrix() override; // new 
        MMatrix getMatrix(const MDGContext&) override; // deprecated 
    }; // Error, override both API in one class 
    
    class UserTransformBase: public MPxTransform { 
        MMatrix getMatrix(const MDGContext&) override; // deprecated 
    }; // Ok 
    class UserTransformDerived: public UserTransformBase {  
        MMatrix getMatrix() override; // new 
    }; // Error, override both API in one inheritance hierarchy 
    • 新しい API のオーバーライドから非推奨 API を呼び出さないでください(または非推奨 API のオーバーライドから新しい API を呼び出さないでください)。
      class UserTransform: public MPxTransform { 
           MMatrix getMatrix() override { 
             return MPxTransform::getMatrix(); // OK 
      
             //return MPxTransform::getMatrix(MDGContext::current()); // Error, calling deprecated API from new API overridden 
             } 
      };