2018年1月25日木曜日

MayaのQtでスクリプトジョブ

Mayaでスクリプトジョブを作成する場合、スクリプトを使い終わったときに
スクリプトジョブを中断しないといつまでも残ります。

この場合scriptJob(kill = イベント番号)とするのですが、Qtのヴィジットを
閉じるタイミングで中断できたら便利ですよねー

だけどpythonのデストラクタ(def __del__:)だとどのタイミングで破棄される
のかがわからないので、ヴィジットのcloseEventをオーバーライドしてウィンドウ
を閉じるタイミングでリストに入れたスクリプトジョブ番号をkillしてみました。

import maya.cmds as mc
import PySide.QtGui as gui
import PySide.QtCore as core


#オブジェクトを移動した時にスクリプトジョブを実行
class Huga(gui.QWidget):
 
 #イベントを終了させます
 def kill(self):
  for k in self.killLst:
   mc.scriptJob(kill = k)
  print("kill")  

 #ウィンドウを閉じた場合に自動的にイベントを閉じる
 def closeEvent(self,e):
  self.kill()

 #スクリプトジョブで実行するイベント
 def on_job(self):
  print("jobOk")
  
 def on_start(self):
  
  #再度スタートした場合一度イベントをきる
  if len(self.killLst) == 3:
   self.killEvent()
   self.killLst=[]
  
  name = mc.ls(sl=1)[0]
  
  #rpトランスフォームの初期値
  self.startRp = mc.xform(name,ws=1,rp=1,q=1)
  self.killLst.append(mc.scriptJob(attributeChange=[name+".tx",self.on_job]))
  self.killLst.append(mc.scriptJob(attributeChange=[name+".ty",self.on_job]))
  self.killLst.append(mc.scriptJob(attributeChange=[name+".tz",self.on_job]))
  

 def __init__(self):
  #イベントリスト
  self.killLst=[]
  
  #init
  super(Huga,self).__init__()
  self.setWindowFlags(core.Qt.WindowStaysOnTopHint)
  
  #create
  self.lineA =gui.QLineEdit()
  btnB = gui.QPushButton("start")

  #event
  btnB.clicked.connect(self.on_start)
  
  #layout
  layoutA = gui.QVBoxLayout()
  layoutA.addWidget(btnB)
  
  self.setLayout(layoutA)
  self.show()

huga = Huga()


2018年1月15日月曜日

Qt Creator リンクエラー

Qt Creatorでプログラム中コードが正しいはずなのにリンクエラーが出るときの対処法

 qmakeを実行で直ります。

 無駄に再インストールしてしまった。