使用していないマスターマテリアルを選択・確認する(スクリプト)
マスターマテリアル(マスターサーフェス)の使用状況は、ブラウザ下のセパレータをドラッグして移動させると
「マスターブラウザ」が表示されマスターマテリアルが、どの形状を参照しているか確認することができます。
しかし、マスターマテリアルパートに多数のマスターマテリアルが存在する場合、
個別に確認するには時間をようし現実的ではございません。
その場合は、以下のスクリプトを実行することで、使用していないマスターマテリアルを
一括して選択することができ視覚的に内容を確認することができます。
なお、スクリプトを実行すると未参照のマスターマテリアルは、ブラウザ上で複数選択されます。
その際、右クリックして表示されたメニューより「マーカー色」を指定して内容を後ほど内容を確認するか、
削除を指定して一括削除することもできます。
使用方法:
1・「#Shade Script」から「main()」までを選択し「コピー」してください。
2・表示メニューよりスクリプトを選択してください。
3・スクリプトウィンドウが表示されますので、フィールド上にマウスカーソルを合わせ「貼り付け」を行なってください。
4・スクリプトウィンドウ内にスクリプトが貼り付けられたのち「実行」ボタンをクリックしてください。
これにより、ブラウザウィンドウのマテリアルパートより、どこの形状にも
参照されていないマスターマテリアルが複数選択されます。
#Shade Script
# @title \ja 未使用のマスターサーフェス(マスターマテリアル)の選択\endja
# @description \ja 形状で使用されていないマスターサーフェスを全て選択します。\endja
def make_used_master_material_set (use_master_material_uuid_set, shape): #全ての形状から、使用しているマスターサーフェスのuuidを洗い出し
if shape.type == 2:
if shape.part_type == 100:#マスターサーフェスパート
return
if shape.master_surface:
use_master_material_uuid_set.add(shape.master_surface.uuid)
if shape.type == 7:
for i in range(shape.get_number_of_face_groups()):
master_surface = shape.get_face_group_surface(i)
if master_surface:
use_master_material_uuid_set.add(master_surface.uuid)
if not shape.has_son:
return
son = shape.son
while son.has_bro:
son = son.bro
make_used_master_material_set(use_master_material_uuid_set, son)
def main():
print("■■「未使用のマスターサーフェス(マスターマテリアル)の選択」を実行します。")
#rootからマスターサーフェスパート探し
r_part = xshade.scene().shape
if not r_part.has_son:
print("■マスターサーフェスパートはありません")
return
m_material_part = None
crr_shape = r_part.son
while crr_shape.has_bro:
crr_shape = crr_shape.bro
if crr_shape.type == 2:#パート
if crr_shape.part_type == 100:#マスターサーフェスパート
m_material_part = crr_shape
break
if m_material_part == None or not m_material_part.has_son:
print("■マスターサーフェスパートはありません")
return
#全ての形状から、使用しているマスターサーフェスのuuidを洗い出し
use_master_material_uuid_set = set([])
make_used_master_material_set(use_master_material_uuid_set, xshade.scene().shape)
#マスターサーフェスの中から、使っていないものを選択
to_active_list = []
crr_shape = m_material_part.son
while crr_shape.has_bro:
crr_shape = crr_shape.bro
if not crr_shape.uuid in use_master_material_uuid_set:#使用マスターサーフェス集合に入っていなければ
#print(str(crr_shape.name) + " is not used.")
to_active_list.append(crr_shape)
#else:
#print(str(crr_shape.name) + " is used.")
if len(to_active_list) == 0:
print("■使用していないマスターサーフェスはありませんでした。")
return
print("■" + str(len(to_active_list)) +"個のマスターサーフェスが使用されていません。")
xshade.scene().active_shapes = to_active_list
print("■使用していないマスターサーフェスを選択しました。")
main()