エッジラインを太くしたい!

こんにちは!Rhinoです。

まだまだ寒いですね。体調管理には気を付けて下さいね。
今日は作業中にエッジラインが遅くて見づらいことがありましたので、
それを解決したいと思います。
以前書いたワイヤーフレームを表示するScriptをちょっとだけ変更して使いますので、
宜しければこちらも見て下さいね。

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

currentPanel = cmds.getPanel( wf =True )
panelType = cmds.getPanel( to=currentPanel )
if( panelType ==  "modelPanel" ):
	lineWidth = cmds.modelEditor( currentPanel, q=True, lw=True )
	mods = cmds.getModifiers()
	if( mods & 1) > 0:
		cmds.modelEditor( currentPanel, e=True, lw=lineWidth/2 )
	else:
		cmds.modelEditor( currentPanel, e=True, lw=lineWidth*2 )

解説

ラインを太くするだけでは不便なので、細くする際のことも考えてみました。

  • エッジラインを太くする
  • シフトキーが押された時はエッジラインを細くする

5行目までの前半部分は以前と同じです。
フォーカスされているmodelPanelを取得して、編集していきます。

6行目からが今回新しい記述ですね。
まずは今のラインの太さを取得しています。
表示関係のものは カメラパネルなどで編集できることが多いため、modelEditor関数を使うことが多いです。
今回もmodelEditorのlwフラグにアクセスして、ラインの太さを取得しています。

	lineWidth = cmds.modelEditor( currentPanel, q=True, lw=True )

あとはこの値を2倍にしてラインを太くすれば完成なのですが、太くするだけでは不便なので、シフトキーが押されている場合は1/2にしてラインを細くするという機能も盛り込みたいと思います。
まずはシフトキーが押されているかどうかを調べないといけませんね。
ShiftAltCtrlキーのように他のキーと併用して使うキーはモディファイアキーと呼ばれています。モディファイアキーが押されているかどうかを取得しましょう。

mods = cmds.getModifiers()

変数modsの中にモディファイアキーが押されている場合は、対応するビット値が入ります。

モディファイアキービット値
Shift 1
Ctrl 3
Alt 4
Windows
or
command(Mac)
5

判別に使う値はビット値ですので、ビット演算子&を使ってShiftが押されている場合と、押されていない場合に分けてラインの幅を変更します。

	if( mods & 1) > 0:
		cmds.modelEditor( currentPanel, e=True, lw=lineWidth/2 )
	else:
		cmds.modelEditor( currentPanel, e=True, lw=lineWidth*2 )

これでシェルフに登録して使う場合にShiftを使ってエッジラインの幅を調整できます。
個人的に重宝しています。
最後にビット演算&についても触れておきます。

ビット演算子&

論理積(AND)と呼ばれているものです。
演算子の左辺と右辺の同じ位置(桁)のビットを比較して、両方のビットが1である場合 は1を返し、互いに1でない場合は0を返します。
今回は1、3、4、5など1桁だけですので、掛け算と同じように考えてもいいと思います。

結果
0&00
1&00
0&10
1&11

それでは、また!

コメント

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