「Maya」script - UVシェルの中央付近のUVを取得
CG自習部屋 Mayaの時間 【MEL】UVを格子状に整列させる
こちらのAriUVGriddingがとても便利で、いつもお世話になっているのですが、
これをUVシェルごとに良い感じのところのUVを選択して実行したいなと思いました。
code:python
# -*- coding: utf-8 -*-
import maya.api.OpenMaya as OM
import maya.cmds as cmds
import maya.mel as mel
from math import floor
#個々のuvShellの中央付近のUVを取得
def get_shellCenterUVs(obj, uvset = ''):
UVs = []
shapes = cmds.listRelatives(obj)
selected = OM.MGlobal.getSelectionListByName(shapes0)
node = selected.getDependNode(0)
mesh = OM.MFnMesh(node)
howmany, shell_ids = mesh.getUvShellsIds(uvset)
u_list, v_list = mesh.getUVs()
for shell_num in range(howmany):
umin = vmin = 9999999999999
umax= vmax = -9999999999999
for idx, uvShell in enumerate(shell_ids):
if uvShell == shell_num:
umin = min(umin, u_listidx)
umax = max(umax, u_listidx)
vmin = min(vmin, v_listidx)
vmax = max(vmax, v_listidx)
centerUV = mesh.getClosestUVs((umax+umin)/2,(vmax+vmin)/2)
UVs.append(centerUV0)
return UVs
sel = cmds.ls(sl=True)
centerUVs = get_shellCenterUVs(sel0)
for uv in centerUVs:
cmds.select('%s.map%s'%(sel0,uv))
mel.eval('AriUVGridding;')
https://gyazo.com/c614004019040e62538fb6e186c23142
大部分は参考URLを参考に。
mesh.getClosestUVs((umax+umin)/2,(vmax+vmin)/2)
で、UVシェルの中央のUV座標に近いUVを取得。
ゆくゆくは格子状のUVのみor選択したUVシェルだけ処理するようにできれば。
参考
https://stackoverflow.com/questions/49932107/in-maya-how-to-find-all-shells-in-a-uv-tile
#Maya #OpenMaya #python #Maya_script