未参照のマスターサーフェスを削除 (スクリプト)
使用されていないイメージやマスターサーフェスは、ブラウザ下のセパレータをドラッグして上に移動させると、
どのイメージまたはマスターサーフェスがどの形状を参照しているか見ることができます。
以下のスクリプトで、マスターサーフェスを取得しどこからも参照されていないものを削除します。
scene = xshade.scene()
# ---------------------------------------------.
# 階層をたどってマスターサーフェスを格納.
# ---------------------------------------------.
def getMasterSurfaces (shape, masterSurfaceA):
if shape.type == 8: # マスターサーフェス.
masterSurfaceA.append(shape)
if shape.has_son:
s = shape.son
while s.has_bro:
s = s.bro
getMasterSurfaces(s, masterSurfaceA)
# ---------------------------------------------.
# 階層をたどってマスターサーフェスが使用されているか調査.
# ---------------------------------------------.
def checkMasterSurface (shape, masterSurfaceA, masterSurfaceUseA):
if shape.type == 8: # マスターサーフェス.
return
# shapeの形状が表面材質を持つ場合、マスターサーフェスの存在をチェック.
if shape.has_surface_attributes:
mSurface = shape.master_surface
if mSurface != None:
for i in range(len(masterSurfaceA)):
if mSurface.ordinal == masterSurfaceA[i].ordinal:
masterSurfaceUseA[i] = 1
break
# フェイスグループを持つ場合.
if shape.type == 7: # ポリゴンメッシュの場合.
faceGroupCou = shape.get_number_of_face_groups()
for i in range(faceGroupCou):
mSurface = shape.get_face_group_surface(i)
if mSurface != None:
for j in range(len(masterSurfaceA)):
if mSurface.ordinal == masterSurfaceA[j].ordinal:
masterSurfaceUseA[j] = 1
break
if shape.has_son:
s = shape.son
while s.has_bro:
s = s.bro
checkMasterSurface(s, masterSurfaceA, masterSurfaceUseA)
# ---------------------------------------------.
# マスターサーフェスを取得.
rootShape = scene.shape # ルート形状.
masterSurfaceList = []
getMasterSurfaces(rootShape, masterSurfaceList)
# マスターサーフェスが使用されているかチェック.
msCou = len(masterSurfaceList)
masterSurfaceUseList = []
if msCou > 0:
for i in range(msCou):
masterSurfaceUseList.append(0)
checkMasterSurface(rootShape, masterSurfaceList, masterSurfaceUseList)
# 未使用のマスターサーフェスを削除.
for i in range(msCou):
# マスターサーフェスが参照されていない場合.
if masterSurfaceUseList[i] == 0:
masterSurfaceList[i].remove() # マスターサーフェスを削除.
未参照のマスターイメージの削除については「未参照のイメージを削除 (スクリプト)」をご参照くださいませ。