選択した頂点をロックする

こんにちは!Rhinoです。
先日思いつきでTwitterに頂点のロック / アンロックについて投稿したのですが、そちらを簡単なスクリプトで再現してみました。
再現したことで、いろいろ問題点もみえてきましたね。
う~んって感じです。

頂点のロック

今回はロックする対象は頂点に絞っています。
機能もシンプルで選択反転 / ロック / アンロック の3つだけになります。
ロック自体はsetAttrのlockフラグにTrueを与えることでできます。
アンロックする場合はFalseになります。

# -*- coding: utf-8 -*-
import maya.cmds as cmds
import maya.mel as mel

# Invert selection
def invSelection( *args ):
	mel.eval( 'invertSelection' )

# Lock selected Vertices
def verticesLock( *args ):
	selection = cmds.ls( fl=True, sl=True )
	verts = cmds.filterExpand( selection, sm=31 )
	
	for v in verts:
		cmds.setAttr( v, l=True )
	
# Unlock selected Vertices
def verticesUnlock( *args ):
	selection = cmds.ls( fl=True, sl=True )
	verts = cmds.filterExpand( selection, sm=31 )

	for v in verts:
		cmds.setAttr( v, l=False )

def createGUI( *args ):
	if cmds.window( 'componentLockWindow', exists=True ):
		cmds.deleteUI( 'componentLockWindow', window=True )
    
	winComponentLock = cmds.window( 'componentLockWindow', title='Component Lock', s=True )
	
	cmds.columnLayout( )

	cmds.separator( h=4, st='none' )
	cmds.button( l='Invert Selection', w=200, c=invSelection )
	cmds.separator( h=4, st='none' )
	cmds.button( l='Lock', w=200, c=verticesLock )
	cmds.separator( h=4, st='none' )
	cmds.button( l='Unlock', w=200, c=verticesUnlock )
	cmds.separator( h=4, st='none' )

	cmds.setParent( '..' )
	
	cmds.showWindow( winComponentLock )

def main():
	createGUI()
	
if __name__ == '__main__':
	main()

問題点

Mayaはロックされた頂点に色を付けるなど、ぱっと分かり易くする方法が簡単には実装できそうにないですね。
ロック解除忘れなどが発生しそうで、それをどう改善するかで使い勝手が分かれそうです。

では、また!

コメント

タイトルとURLをコピーしました