これはSpaceNaviが対応しないはずだ・・・。
Softimageは基本の4画面をViews "View Maneger"と扱います。
いわゆる、A,B,C,Dですね。
それぞれ、いろいろな表記を持つんですが通常扱われる3Dの画面は、Viewとよばれ、
その名を ViewA, ViewB, ViewC, ViewDとなります。
カメラを取得するなら
GetValue("Views.ViewA.TopCamera")とかになるわけです。
そして、このAは、その中身を入れ替えることが出来ます。
たとえばレンダーツリーとか、テクスチャエディットとかです。
問題はここからなのですが、
'Object View'だとABCDのなかに("Views.View1.UserCamera")になるようです。英字でなくて数字ですね
どうやら、'Object View'を追加していくとこの末尾の数字が加算されていくだけのようです。
そして、フローティングパレットであろうがなかろうが関係ありません。
View1,View2・・・ と続いていきます。 そして、法則は、作った順番、欠番があれば(途中で閉じた)、
そこに生成されます。
そして、目的のビューのアクティブなView Numberが把握できません
GetValue("Views.View" + num + ".UserCamera")
この番号です。
どなたか、ビューからこの番号の取得の仕方が、あればお教えください orz
現在の、付け焼刃の回避策として、
Viewマネージャーにおける 'Object View' の数を数えてから、
フローティングパレットの数を数えてます。
順番どおりなら、フローティングが一番大きな数字になるはずです(汗
#Python
app = Application
log = app.Logmessage
log("-" * 100)
def getActiveCamera():
oL = app.DeskTop.ActiveLayOut
#デフォルトビューのチェック
oV = oL.views("vm")
abcd = oV.GetAttributeValue("viewportundermouse")
if oV.Views(abcd).Type == 'Viewer':
ActiveView = oV.GetAttributeValue("activecamera:" + abcd)
log(ActiveView)
if (ActiveView =="User") or (ActiveView =="Top") or (ActiveView =="Front") or (ActiveView =="Right"):
cam = app.GetValue("Views.View" + abcd + "." + ActiveView + "Camera")
else:
cam = app.GetValue(ActiveView)
#ビューマネージャーにある、オブジェクトビューのチェック
num = 0
for i in range(4):
if oV.Views(i).Type == 'Object View':
num += 1
log("ObjectViewCount : " + str(num))
if oV.Views(abcd).Type == 'Object View':
ActiveView = oV.Views(abcd).GetAttributeValue("Camera")
ViewName = oV.Views(abcd).FullName
log(ActiveView)
log(ViewName)
if ActiveView == "default":
cam = app.GetValue("Views.View" + str(num) + ".UserCamera")
else:
cam = app.GetValue(ActiveView)
#フローティングのオブジェクトビューの対応
for x in oL.Views:
if x.Type == 'Object View':
log(x)
ActiveView = x.GetAttributeValue("Camera")
if ActiveView == "default":
cam = app.GetValue("Views.View" + str(num) + ".UserCamera")
else:
cam = app.GetValue(ActiveView)
log(cam)
getActiveCamera()
このコメントは投稿者によって削除されました。
返信削除すいません、ちょっと勘違いな事を書いてしまったので消しときましたw
返信削除お世話になってます
返信削除自分も書きながら、説明がうまくないなぁと思いました orz
View番号の取得の仕方があればよろしくお願いします~(ペコリ
あれですよね
返信削除オブジェクトビューがdefultのときのカメラオブジェクトを取得したいのですよね?
ざっと見たところ分からなかったですw
ただ
set oCams = FindObjects("","{5FC0CCAE-3DC8-11D0-9449-00AA006D3165}")
でシーン中の全カメラが取得できるのですが
オブジェクトビューを開く前と後に実行し
増えた分を調べればそれらがビューに関連するものだと推測できるかもですw
面倒な上オブジェクトビューを開くときには必ずスクリプトを通す必要がでるので
どうかと思いますがw
ふむー、難しそうですね〜。
返信削除アクティブなカメラを拾おうとせず、
FindObjextsでカメラ一覧を取得して選択する方がイイかもしれませんね〜。
スマートじゃなくなりますががが