マテリアルのフェイスアサインがあるか無いかを判断するプログラムを
https://qiita.com/harayoki/items/8ec88d8de7bb91357fc8
この辺りの考察を元に作ってみました。(こちらの記事から抜き出して移動しました。)
MAYA2018 + MacOS Sierraで動作確認しています。
SGへのコネクションがインスタンスオブジェクトグループとオブジェクトグループのどちらから伸びているかで確認しても良さそうですが、objectGrpCompList
へフェイス番号が設定されているか確認するのでも良さそうなので、簡潔に書けそうなその判断でやってみます。
import pymel.core as pm
def has_face_assign(shape):
"""
シェイプにマテリアルのフェイスアサインがあるかどうか確認する
:param shape: チェックするシェイプ
:type shape: pymel.nodetypes.Shape
:rtype: bool
"""
instanceNumber = shape.instanceNumber()
objectGrpCompList = \
shape.instObjGroups[instanceNumber].objectGroups[0].objectGrpCompList
num_face_block = (len(objectGrpCompList.get()))
return num_face_block > 0

shape = pm.PyNode('pCube1|pCubeShape1') # フェイスアサインのないシェイプ
has_fa = has_face_assign(shape)
print(has_fa)
# 出力:False
shape = pm.PyNode('pCube2|pCubeShape1') # フェイスアサインのあるインスタンスシェイプ
has_fa = has_face_assign(shape)
print(has_fa)
# 出力:True
shape = pm.PyNode('pCube3|pCubeShape2') # インスタンスが存在しないフェイスアサインのないシェイプ
has_fa = has_face_assign(shape)
print(has_fa)
# 出力:False
shape = pm.PyNode('pCube4|pCubeShape3') #インスタンスが存在しないフェイスアサインのあるシェイプ
has_fa = has_face_assign(shape)
print(has_fa)
# 出力:True
shape = pm.PyNode('pCube5|pCubeShape4') #マテリアルが外れてしまったシェイプ
has_fa = has_face_assign(shape)
print(has_fa)
# 出力:False
問題なさそうです。