Maya Python API 2.0 入門編『最近接頂点の取得』

MayaのPython API 2.0について解説してみました。
例として最近接頂点の取得の実装を行いつつ、API2.0の使い方を説明しています。

最近接頂点はMaya Pythonの標準モジュールのmaya.cmdsでは取得できません。
取得できないものが取得できるのがAPIの強みですね。

管理人がYouTubeで解説!

動画で使用したスライド

動画で使用したコマンド

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

# 入力頂点
in_pos = cmds.xform("in_locator", q=True, t=True)

# 選択リストを作ってターゲットメッシュを追加する
sl = om2.MSelectionList()
sl.add("body_smooth_skinShape")

# 選択リストの0番目の要素をMDagPath型で取得する
dagpath = sl.getDagPath(0)

# 取得したMDagPathをMFnMeshに入れる
mesh = om2.MFnMesh(dagpath)

# MFnMeshのコマンドが使えるようになったので最近接頂点取得コマンドを使ってみる。
poly_pt, poly_id = \
    mesh.getClosestPoint(om2.MPoint(in_pos),om2.MSpace.kWorld)
    
# 指定したポリゴン内の頂点IDを取得する
poly_ids = mesh.getPolygonVertices(poly_id)

# 入力頂点から最も近い頂点IDの位置を取得する
closest_vtx_pos = None
temp_length = None
for i in range(len(poly_ids)):
    temp_pos = mesh.getPoint(poly_ids[i], om2.MSpace.kWorld)
    delta = (temp_pos - om2.MPoint(in_pos)).length()
    if temp_length is None or delta < temp_length:
        closest_vtx_pos = temp_pos
        temp_length = delta

# 取得した最も近い頂点位置に"out_locator"をセットする
cmds.xform("out_locator", t=list(closest_vtx_pos)[:3])

Python API勉強におすすめ書籍!

少し古い書籍になりますが、Python APIにおける基本が全て書かれています。
というよりも本書をマスターできればMaya Pythonマスターです。ってくらいには初心者向けではありません。

関連記事

  1. MASH × CurveWarp × ShrinkWrap で時計バンドをサクッと作る方法

    2020-10-30

  2. お洒落なリグのコントローラーの作り方

    2020-12-22

  3. Dashスクリプトで等間隔&ランダム配置

    2022-10-13

  4. 【Patreon限定】三平方の定理を利用したSticky Lipsリグのサンプル配布

    2021-02-08

コメントをお待ちしています。

コメント

ABOUT

テクニカルアーティストの為のまとめサイトです。

本サイトでは、『YouTube ✕ Blog』を中心に
情報発信をしていきます。

また、テクニカルアーティストとしての様々な
ライフハック記事も投稿予定です。

限定情報会員

PATREONでは、限定情報やサンプルファイルの配布も行っています。登録頂けると更新頑張れます。支援の方よろしくお願いします。


免責事項

本ウェブサイト内で公開している全ての情報の有用性や安全性については当方は一切の保証を与えるものではありません。
利用したことによって引き起こる直接および間接的な損害に対して当方は一切責任を負うものではありません。
全て自己責任でご使用ください。

3DCGBOOK出版

BOOTHで技術書を販売利しております。







スポンサー

ページ上部へ戻る