2018年4月30日月曜日

OpenMaya:現在のビューポートからフェースを選択する

大分前にopenMayaを使って、現在のビューポートからフェースを選択するコードを書いたのですが、 どこかに行ってしまい、参考にした海外の書き込みも見当たらず、どーしたもんかと思っていたところ、 ようやく見つけました。
def faceListFromView():
mc.select( all=True )
mc.selectMode(component=True )
mc.selectType( facet=True )
mc.hilite()
view = OMU.M3dView.active3dView()
OM.MGlobal.selectFromScreen(0, 0, view.portWidth(),
view.portHeight(), OM.MGlobal.kReplaceList)
FACE_LIST = cmds.ls(sl=True,fl=True)
return FACE_LIST
こんどこそ忘れないように。 ※後になって参考にした書き込みを発見…はやくいってよぉ…。
参考:http://forums.cgsociety.org/archive/index.php?t-1045968.html

なお、元ソースを探してさまよっていた際、porySelectConstraintを使った方法を紹介している記述を見つけたので、試してみました。
def selectFromcamera(cam=None):
if not cam:
return
pos = mc.xform(cam,q=True,ws=True,wd=True,t=True)
#pos = mc.getAttr('%s.translate'%cam)[0]
mc.polySelectConstraint(m=3,t=0x0008,v=True,va=90,vp=pos)
mc.polySelectConstraint(m=0,v=False)
参考:https://forum.highend3d.com/t/select-polygons-facing-camera/2782/3
しかし、使ってみると、こちらはポリゴンメッシュ内部にカメラがめり込むと、そのポリゴンメッシュが選択不能になってしまったので、openMaya経由のほうが無難に使えました。