Maya Script API2.0 – ハードエッジの選択

このサイトを探せばあるとは思うのですが、どこにあるのか改めて書いておきます。
タイトルと内容が一致しないと、後から探すのが大変なもので、、

 

import maya.cmds as cmds
import maya.api.OpenMaya as om2

def select_soft_or_hard_edges(flag = "hard"):
	sel = cmds.ls(sl=1)
	node,comp = get_ploy_comp("edge",*sel)
	
	if not comp:
		return
	
	selList = om2.MGlobal.getActiveSelectionList()

	if not selList:
		return

	selObj = []
	for x in range(selList.length()):
		mDag = selList.getDagPath(x)
		
		if mDag.hasFn(om2.MFn.kMesh):
			selObj.append(om2.MFnMesh(mDag))

	if selObj:
		cmds.selectMode(co=1)
		cmds.selectType(smp=0,sme=1,smf=0,smu=0,pv=0,pe=1,pf=0,puv=0)

		if flag == "soft":
			cmds.select(["{0:}.e[{1:}]".format(x.fullPathName(),i) for x in selObj for i in range(x.numEdges) if x.isEdgeSmooth(i)],r=1)
		elif flag == "hard":
			cmds.select(["{0:}.e[{1:}]".format(x.fullPathName(),i) for x in selObj for i in range(x.numEdges) if not x.isEdgeSmooth(i)],r=1)

select_soft_or_hard_edges()

API2.0を使用したハードエッジの選択です。
前回のスクリプト、「get_ploy_comp」関数を使用することを前提にしております。
一応動きはするのですが、すでに選択されているエッジからハードエッジのみを抽出したりなどの処理を入れるのが適当かと思います。
これには入っておりません。

 

しかし、このスクリプト、動作は早くないです、、
うーん、やはりMayaコマンドから渡して、最終的にもMayaコマンドで選択を適用しているからだろうか、、
つい面倒くさいので、できるだけMayaコマンドに頼ってしまいます。
やっぱり全部API2.0で書いてプラグイン化しないと最適ではないんだろうなぁ。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です