HEXA BLOG
ヘキサブログ
その他
本日のpymel
皆さま、スープカレーは食べていますか。
![]()
ヨセミテ![]()
です。
先日、スープカレーShantiに行ってまいりました。
関東の店舗数が多く、そこそこ通い易い距離なので何度か食べに行ってます。
とてもおしゃれな店内が印象的なお店です。
さっぱり目のスープカレーでチキンがやわらかく、美味しく頂きました。
皆さんの快適な
スープカレーライフ
を心より望んでおります。
▼Pymelの話
以前のブログで書かさせていただいたとおり、今回からPythonについて書いていこうかな、と思っていました。
Maya上でスクリプトを利用する場合、mel、cmds、Pymelなどがあります。
入社時はcmdsを利用していたのでが、
最近制作の主軸はめっきりPymelになってきています。
MEL → cmds に乗り換えたときも作業工程を短縮できた実感があったのですが、
Pymelはその時と比較にならないほど工程を短縮できているように感じます。![]()
Pymelでblogを書くにあたって毎回一つ、
自分の勉強のためにも簡単なMayaのスクリプトを作成していこうかと思います。
今回ブログのために作成したスクリプトは、
Mayaのツール作成の際に不可欠な機能のひとつ、
選択機能についてスポットを当てたスクリプトです。
mayaのスクリプトエディタに貼り付けて実行すればウィンドウが作成されると思います。
import pymel.core as pm
import pymel.core.nodetypes as pmnode
class simpleTypeSelector(object):
def __init__(self):
self.windowManageName = "simpleTypeSelectorWindowName"
self.windowTitle = "simpleTypeSelector"
self.windowSize = [400,300] # ウィンドウのサイズ
self.addButtonSize = [400,30] # ボタン追加ボタンのサイズ
self.singleButtonSize = [100,30] # ボタンのサイズ
self.buttonsGridColumnNum = 4 # ボタンの横の並びの数
# 初期に作成するノードのタイプ
self.selectionTypeList = [pmnode.Transform,pmnode.Mesh,pmnode.Joint,pmnode.CurveShape]
def selectButtonAction(self, nodeType):
# === 選択ボタンの挙動 ===
selectTarget = pm.ls(type= nodeType)
pm.select(selectTarget)
def createSingleSelectionButton(self, nodeType):
# === ボタン作成 ===
pm.button(l = nodeType, c = pm.Callback(self.selectButtonAction,nodeType))
def checkWindowOverlap(self):
# === windowの重複確認 ===
if pm.window(self.windowManageName, ex = True):
pm.deleteUI(self.windowManageName)
def buttonCreateButton(self):
# ボタンを作成するボタン
pm.button(u"選択からノードタイプを作成", w = self.addButtonSize[0], h = self.addButtonSize[1],
c = pm.Callback(self.buttonCreateButtonAction))
def buttonCreateButtonAction(self):
# ボタン作成ボタン動作
# 選択オブジェクトの先頭のノードタイプからボタンを作成
selection = pm.ls(sl = True)
nodeType = selection[0].nodeType() # ------ ※
with self.buttonField:
pm.button(l = nodeType, c = pm.Callback(self.selectButtonAction,nodeType))
def main(self):
# === windowの作成 ===
self.checkWindowOverlap()
window = pm.window(self.windowManageName, t = self.windowTitle,
w = self.windowSize[0], h = self.windowSize[1])
with pm.columnLayout():
self.buttonCreateButton()
self.buttonField = pm.gridLayout(cw = self.singleButtonSize[0], ch = self.singleButtonSize[1],
nc = self.buttonsGridColumnNum)
with self.buttonField:
for nodeType in self.selectionTypeList:
self.createSingleSelectionButton(nodeType)
window.show()
# 実行文
simpleTypeSelectorIns = simpleTypeSelector()
simpleTypeSelectorIns.main()
ノードタイプを一括選択するためのウィンドウを作成するツールです。
ノードタイプのボタンをクリックするとそのノードタイプが選ばれます。

足りないものは上のボタンを押すと選択したノードタイプがUI上に追加されるようにしました。

Pymelで組むことの利点として、(※印の部分)
なんとPymelのlsで取得したノードは、自らのノードタイプを自分で取得する機能を持っているのです!
ノード名だけに限らず頂点グループだったらそのインデックス番号を持っていたり、
フェースだったら隣接するフェースの取得や、自らの法線方向を取得する機能を使えたりします。
MELやcmdsではわざわざ取得する専用の関数を判定モードで呼びだして・・・。
いくつも手順も踏んでいたような・・・。
Pymel、すごい便利!![]()
![]()
![]()
![]()
![]()
ドキュメントが英語しかないのが日本人には少し難点なのですが・・・。
予定外で作成要望のでたDCCツールは大体がとにかく今必要!
というものがほとんどな気がします。
ですので、要望から完成までの期間はとにかく早い方がよい、と考えています。
その点へのPymelの貢献力はとても大きいと感じています。
cmdsユーザーは是非使ってみてください!
MELユーザーも(Pythonを覚えるとこからになっちゃいますが・・・)
使ってみるとその効率に驚けると思います。
▼次はどんなネタにしよう
次回はmayaでPySideを使ってUIを作る、をしてみたいなぁと思う今日この頃。
次回までにPySideを覚えていなければ引き続きPymelで何かすると思います。![]()
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (5)
- 美学 (1)
- いいモノづくり道 (227)
- 採用 -お役立ち情報も- (149)
- プログラム (189)
- デザイン (99)
- ゲーム (273)
- 日記 (1,105)
- 書籍紹介 (113)
- その他 (893)
- 就活アドバイス (20)
- ラーメン (4)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (6)
- 子育て (1)
- 筋トレ (1)
- NicO (3)
- MakeS (9)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (35)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2025年
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年





