使用していないマスターマテリアルを選択・確認する(スクリプト)

マスターマテリアル(マスターサーフェス)の使用状況は、ブラウザ下のセパレータをドラッグして移動させると
「マスターブラウザ」が表示されマスターマテリアルが、どの形状を参照しているか確認することができます。

しかし、マスターマテリアルパートに多数のマスターマテリアルが存在する場合、
個別に確認するには時間をようし現実的ではございません。

その場合は、以下のスクリプトを実行することで、使用していないマスターマテリアルを
一括して選択することができ視覚的に内容を確認することができます。

なお、スクリプトを実行すると未参照のマスターマテリアルは、ブラウザ上で複数選択されます。
その際、右クリックして表示されたメニューより「マーカー色」を指定して内容を後ほど内容を確認するか、
削除を指定して一括削除することもできます。

使用方法:
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()
 
この記事のタイトルとURLをコピーする
Translate »