2016/08/23

[Maya]OpenMayaでカーブのポイントを取得

api2.0(2016以降)
import maya.api.OpenMaya as om2

def main():
    sl = om2.MGlobal.getActiveSelectionList()
    dagPath = sl.getDagPath(0)
    try:
        dagPath.extendToShape()
    except:
        return
    if not dagPath.hasFn(om.MFn.kNurbsCurve):
        return
    crv = om.MFnNurbsCurve(dagPath)
    pnts = fn_crv.cvPositions()
    for pnt in pnts:
        print pnt
        
        
main()
api1.0
import maya.OpenMaya as om
util = om.MScriptUtil()

def main():
    sl = om.MSelectionList()
    om.MGlobal.getActiveSelectionList(sl)
    dagPath = om.MDagPath()
    sl.getDagPath(0, dagPath)
    try:
        dagPath.extendToShape()
    except: return
    if not dagPath.hasFn(om.MFn.kNurbsCurve):
        return
    crv = om.MFnNurbsCurve(dagPath)
    pnts = om.MPointArray()
    crv.getCVs(pnts)
    for i in range(pnts.length()):
        pnt = pnts[i]
        print pnt.x, pnt.y, pnt.z
main()

[Maya]OpenMayaでNurbsCurve

2016以降(api2.0使用)

import maya.api.OpenMaya as om

curveFn = om.MFnNurbsCurve()
deg = 1
vts = om.MPointArray()
vts.append( om.MPoint(1,0,-1) )
vts.append( om.MPoint(-1,0,-1) )
vts.append( om.MPoint(-1,0,1) )
vts.append( om.MPoint(1,0,1) )
vts.append( om.MPoint(1,0,-1) )
span = len(vts) - deg
nknots    = span + 2*deg - 1
knots = om.MDoubleArray()
for i in xrange(nknots):
    knots.append(i)

sl = om.MGlobal.getActiveSelectionList()
dagPath = sl.getDagPath(0)
node = dagPath.node()
curve = curveFn.create( vts, knots, deg, om.MFnNurbsCurve.kOpen, False, False, node)


2015以前

import maya.OpenMaya as om

curveFn = om.MFnNurbsCurve()
deg = 1
vts = om.MPointArray()
vts.append( om.MPoint(1,0,-1) )
vts.append( om.MPoint(-1,0,-1) )
vts.append( om.MPoint(-1,0,1) )
vts.append( om.MPoint(1,0,1) )
vts.append( om.MPoint(1,0,-1) )
span = vts.length() - deg
nknots    = span + 2*deg - 1
knots = om.MDoubleArray()
for i in xrange(nknots):
    knots.append(i)

sl = om.MSelectionList()
om.MGlobal.getActiveSelectionList(sl)
dagPath = om.MDagPath()
sl.getDagPath(0, dagPath)
node = dagPath.node()
curve = curveFn.create( vts, knots, deg, om.MFnNurbsCurve.kOpen, False, False, node)

2015/10/27

windows x python で日本語

windwos環境でpythonで日本語を出力する際のエンコードはcp932 を使うのが良いらしい
http://d.hatena.ne.jp/r_ikeda/20111105/shift_jis

2012/12/21

インスタンスモデルを普通のモデルに戻す

すげー久しぶりの更新。。。

標準機能にあると思って探したけどどうやらないみたいなので書きました。
インスタンスモデルを普通のモデルに戻すスクリプトです。

マスターモデルを選択して実行。

とりあえず動くけど直したいところは結構あります。
とりあえずメモってことで。
from siutils import si, disp

def GetInstances(oMdl):
    gInsts = oMdl.Groups('InstanceGroup')
    return gInsts.Members
    
def ResotreInstance(oInst, oMstr=None, bDel=True):
    if not oMstr:
        oMstr = oInst.InstanceMaster
    sInstName = oInst.Name
    oParent   = oInst.Parent
    oTmp = si.Duplicate("B:"+oMstr.Name, "", 2, 1, 1, 0, 2, 1, 0, 1, "", "", "", "", "", "", "", "", "", "", 0)(0)
    oTmp.Kinematics.Global.Transform = oInst.Kinematics.Global.Transform
    oTmp = disp(oTmp)
    if bDel:
        si.DeleteObj(oInst)
    oTmp.Name = sInstName
    oParent.AddChild(oTmp)
    return oTmp
 

oMdl = si.Selection(0)
if not oMdl.Type == '#model':
    oMdl = oMdl.Model

oInsts = GetInstances(oMdl)
for oInst in oInsts:
    ResotreInstance(oInst, oMdl, False)
si.DeleteObj(oInsts)

マスターモデルをデュプリケイトして位置と名前と親を合わせただけですね。
毎回DeleteObjすると効率が悪いので外に出していっぺんにやりましたが、Duplicateも同様なので修正したいです。

ま、時間があるときにまた直すかも。

2012/06/13

Edet Soft 'Edet Paper World' making-of


Edet Soft 'Edet Paper World' making-of from GLASSWORKS Amsterdam on Vimeo.

なにこれすげーリグ!
おもしろい!
http://www.sublimetext.com/
 

こんなテキストエディタあったんだなぁ。
シンプルで使いやすそう。
WebページにはBuyって書いてあるから無料ではないのかな?
ちゃんと読んでみよう。