ON-BLOG

CGのこと、あれこれ書いてます。

フェースを表示トグルするツール

久しぶりに更新します。

とある事で必要に駆られたので作りました。
※WEBにもっといいやつありますし、あたらしいエクステンションには標準で搭載されてますが…


ポリゴン表示をトグルです。


一応ルールがあります。
1.初めてフェースを非表示にする時は、オブジェクトのフェース(消したい所)を選んで実行して下さい。
2.実行後は、フェース選択モードからオブジェクトモードに戻して下さい。
3.1回実行した後は、アウトライナーに【Poly_Hide_Set】という名のSetができるので、それを選んでスクリプトを実行して下さい。
 それで非表示だった箇所が表示されます。
4.もう1回【Poly_Hide_Set】という名のSetを選んで実行すると、再度非表示になります。
 これを繰り返してお使い下さい。
5.提出、納品時は【Poly_Hide_Set】という名のSetを選んで【Ctrl】キーを押してスクリプトを実行して下さい。
 これで、setsと、ヒストリーが削除され、綺麗になります。

あと、連打実行はNGで、【Poly_Hide_Set】という名のSetの名前は絶対に変えないで下さい。
というより、名前が変わった際は、手動で消して下さい。

詳しくは動画にて。

SelPoly_Hide from tommy_on on Vimeo.


以下コード

# -*- coding: utf-8 -*-
import maya.cmds as cmds
import maya.mel as mel	

def SelPoly_Hide():
	#選択をリストに格納
	oSel = cmds.ls(sl=True)
	#フラグ立て
	Check = 0
	#選択されていなかったら
	if oSel == []:
		return
	#キーボードステートをチェック
	mods = cmds.getModifiers()
	#コントロール押していたら、関数に飛んで終了
	if (mods & 4) > 0:
		if oSel[0] == "Poly_Hide_Set":
			Toggle(oSel)
			Clean()
			return
	#選択がセットで且つ、コントロール押していなかったら。
	if oSel[0] == "Poly_Hide_Set":
		Toggle(oSel)
		return
	#フェースを選択
	oSelFace = cmds.filterExpand(sm=34)
	#フェースじゃなかったら
	if oSelFace == None:
		return
	#フェースからオブジェクトを取得
	const =  oSelFace[0].rpartition(".")
	#ヒストリーを取得
	oList = cmds.listHistory(const[0])
	for i in oList:
		#穴開けるヒストリーがあったら、フラグを立てる
		if i == "Hide_Poly":
			Check = 1  
	#フラグが立っていたら
	if Check == 1:
		cmds.polyHole(assignHole=0)
	#なかったら
	else:
		mel.eval('ToggleHoleFaces;')
		FaceSet = cmds.sets(n="Poly_Hide_Set")
		cmds.polyHole(assignHole=1)
		cmds.rename("polyHoleFace1","Hide_Poly")
	
#単純に表示を切り替えているだけ
def Toggle(oSel):
	cmds.select(hierarchy=True)
	mel.eval('ToggleHoleFaces;')
	cmds.select(cl=True)

#ヒストリとセットを削除
def Clean():
	cmds.delete("Hide_Poly")
	cmds.delete("Poly_Hide_Set")



SelPoly_Hide()