日々適当

hibitekitou

センター位置を選択したコンポーネント中心へ

cg |2014-01-23
先日の疑問点。暫定的に解決しました。コメントで教えてもらったその方法は、2種類。
一つ目。

まず、センターに設定したいコンポーネントを選びます。図ではポリゴンを選んでいます。



次に作業平面を選択範囲に合わせます。



センターを選んだ後、 setup→設定→設定→作業平面の位置へ を実行します。



必要なら、終わったら作業平面はリセットしときましょう。

二つ目は、センターを選択した状態で、コンポーネントを選び、その上で center.matchGeometryPos ってコマンドを実行してやる、というものです。ただこれ、なんか分からないのですけど、うまく動くときと動かないときがありまして、複数のコンポーネント選択時の最後に選ばれたコンポーネント中心にセンターが移動するとかすることがありました。

そんなわけで、面倒なんでスクリプト書いてみました。コンポーネント選択後実行です。コンポーネントを構成するバーテックスの位置の平均の位置にセンターを移動します。

centerToComponets.py
#python
import lx

def whichMode():
	#current edit mode
	#0: vertex
	#1: edge
	#2: polygon
	#3: item
	#4: ptag
	#5: center
	#6: pivot
	if lx.eval("select.typeFrom vertex;edge;polygon;item;pivot;center;ptag ?"):
		return 0
	elif lx.eval("select.typeFrom edge;vertex;polygon;item;pivot;center;ptag ?"):
		return 1
	elif lx.eval("select.typeFrom polygon;edge;vertex;item;pivot;center;ptag ?"):
		return 2
	elif lx.eval("select.typeFrom item;pivot;center;edge;polygon;vertex;ptag ?"):
		return 3
	elif lx.eval("select.typeFrom item;pivot;center;edge;polygon;vertex;ptag ?"):
		return 4
	elif lx.eval("select.typeFrom center;pivot;item;edge;polygon;vertex;ptag ?"):
		return 5
	elif lx.eval("select.typeFrom pivot;center;item;edge;polygon;vertex;ptag ?"):
		return 6

def compIndex(eMode):
	return lx.evalN("query layerservice %s ? selected"%eMode)


def convVertex():
	lx.eval("select.convert vertex")


def setCenterToPosition(pos):
	lx.eval("select.type item")
	lx.eval("select.convert center")

	lx.eval("center.setPosition x:%f y:%f z:%f mode:world"%(avePos[0], avePos[1], avePos[2]))


def restoreVertex(verts):
	lx.eval("select.drop vertex") 
	lx.eval("select.type vertex")
	for p in verts:
		lx.eval("select.element %s veretex add %s" % ( currentLayer , p ) )


def calcAvePos(verts):
	posx = 0.0
	posy = 0.0
	posz = 0.0
	for p in verts:
		pos = lx.evalN ("query layerservice vert.wpos ? " + p)
		posx = posx + pos[0]
		posy = posy + pos[1]
		posz = posz + pos[2]
	return [ posx / len( verts ), posy / len( verts ) ,  posz / len( verts ) ]
	

# Get Index of Current Layer
currentLayer = lx.eval("query layerservice layer.index ? main")
lx.out(currentLayer)

#Get Current mode
currentEditMode = whichMode()

eMode = "verts"

if currentEditMode == 0:
	oriVerts = selComps = compIndex(eMode)
	avePos = calcAvePos(selComps)
	setCenterToPosition(avePos)

elif currentEditMode == 1:
	lx.eval("select.type vertex")
	oriVerts = compIndex(eMode)
	lx.eval("select.type edge")
	convVertex()
	selComps = compIndex(eMode)
	restoreVertex(oriVerts)
	avePos = calcAvePos(selComps)
	setCenterToPosition(avePos)

elif currentEditMode == 2:
	lx.eval("select.type vertex")
	oriVerts = compIndex(eMode)
	lx.eval("select.type polygon")
	convVertex()
	selComps = compIndex(eMode)	
	restoreVertex(oriVerts)
	avePos = calcAvePos(selComps)
	setCenterToPosition(avePos)
コメント ( 2 )|Trackback ( )

Parallelss Desktop 9上でのMavericks

mac |2014-01-23
MavericksにMayaが入るかチェックを行うために、Parallels Desktop 9にMavericksをインストールしました。
MacBook Pro Late 2013ではMac App StoreからダウンロードできるはずのMavericksのインストーラをダウンロードできないので(このマシンでは動かないと言われる)、復元パーティションを利用してインストールを行っています。

それで、インストールは問題なく終わったのですけど、ここで問題発生。構成でビデオメモリ量を128MBより大きくすると起動してくれないのですよ、これが。なお、WindowsやLinux ( CentOS ) の構成ではビデオメモリを1GBに設定して動いております。



まぁしかし、ともかくmayaを入れようとしました。
maya 2012はインストーラは起動はするものの、ボタンが反応せずインストールすら行えませんでした。
maya 2013は普通にインストールできました。で、起動しようとしたのですけど、そこで先の問題が引っかかってきます。ターミナルからmayaを起動させようとすると、"Unable to choose a pixel format" ってエラーをはいて起動をあきらめてしまうのですな、これが。どうも、Parallelsのグラフィック周りの問題っぽく見えます。OpenGLが適切に作動するグラフィック環境と認識されていないのでしょうか。
2012も2013もいずれもAutodeskから落とせる一番新しい物を利用しています(サブスクリプションに入っていなくても落とせるバージョンを使用)。
maya 2014もSP3のインストーラで普通に入りましたが、2013と同様 "QGLContext::chooseMacVisual: Unable to choose a pixel format"というエラーをはいて起動しませんでした。

Parallels Toolsでインストールされるグラフィックドライバの出来がよろしくないって事でしょうかね。
アップデートに期待します。
コメント ( 0 )|Trackback ( )
  ・