日々適当

hibitekitou

アーカイブユーティリティの初期設定を見直したほうがいい

mac |2014-02-05


こーんな風に大量のzipファイルをまとめて選択し、ダブルクリックするとアーカイブユーティリティを使っての伸長処理が始まるわけですが、ファイルができ上がるたびに伸長されたファイルの存在するFinderウインドウをアクティブにするため、他の作業がほぼ出来ない状態に陥ります。
その処理をして、他の作業をするために他のソフトをアクティブにしても、Finderがすぐに前に出てきてしまい、他のソフトでの(あるいはFinderの別のウインドウを使っての)作業は不可能です。
んで、zipファイルの数が少なければ待てばいいのですけど、数百ファイルとかやるとかなり待たされることになるのです。

そこで、アーカイブユーティリティの初期設定を見直しすことにしました。
/System/Library/CoreServices
にあるアーカイブユーティリティを起動して、初期設定で「展開された項目をFinderに表示」のチェックを外してやります。



これで、バックグラウンドで伸長処理を行ってくれます(ウインドウが絶えず開閉するので見た目はうるさいですが…)。
まぁ安易にダブルクリックせずに、他のユーティリティやターミナルに投げるのも手ですけどね。
コメント ( 0 )|Trackback ( )

Skybox用テクスチャを書き出すためのスクリプト

cg |2014-02-05
というわけで、書いてみましたよ。といっても、Vueのスクリプトでバッチレンダリングに投げるコマンドが分からないので、普通にレンダリングを実行する Rennder() を使っています。その結果、ちょっとした処理が必要となりました。

まず、カメラを適切な位置に持って行きます。地面にめり込んだ位置とか、想定されるシーンよりもはるかに高い高度に置いても仕方がないでしょ、というぐらいの意味です。
次にレンダリングの設定をします。ここでレンダリングクオリティ、レンダリングサイズ他、必要な情報を一通り設定します。さらに、バッチレンダリングで回るように、Renderer部分を External にしておきます。もし、HyperVueが正しく動く設定になっていないなら、Editボタンを押してちゃんと動くように設定しておきませう。



そしたらスクリプトを実行します。ここの部分はAutomation→Run Python Script... からの実行なんでしょうね。下図は過去に実行してあるならって前提の時はこっちの方が楽だよね、って図。



そしたらバッチレンダリングの管理ウインドウが開きますが、これを閉じないと次に行きません。6枚レンダリングするので、この窓を6回閉じる作業が待っています。



後はレンダリングが終わるのを待つだけです。
スクリプトは以下の通り。ここの、dirPath の行とfileNameの行が出力する場所とファイル名になるので正しく指定してやりませう。
# -*- coding: utf-8 -*-
#Rendering Cube map
import math

dirPath = "/Users/username/Desktop"
fileName = "skycube"
extension = "tif"


def GetHFoV(HFoV):
	filmW = 36.0
	return filmW/(2 * math.tan(math.radians(HFoV)/2))

SelectByType(VuePython.VOT_Camera)
camObj = GetSelectedObjectByIndex(0)
cam = camObj.ToCamera()

oriFocal = cam.Focal()
oriExp = cam.Exposure()
oriHFilmShift = cam.HorizontalFilmShift ()
oriVFilmShift = cam.VerticalFilmShift ()

oriPos = camObj.Position()
oriRot = camObj.GetRotationAngles()

oriRenderOutPut = RenderOutput()
if oriRenderOutPut == 0:
	print("VuePython.RO_MainView")
elif oriRenderOutPut == 1:
	print("VuePython.RO_Screen")
elif oriRenderOutPut == 2:
	print("VuePython.RO_Disk")

print("Original Position: %f, %f, %f "%( oriPos[0],oriPos[1],oriPos[2] ) )
print("Original Rotation: %f, %f, %f "%( oriRot[0],oriRot[1],oriRot[2] ) )
print("Original Cam Value Focal:%f, Exposure:%f, Holi Film Shift:%f, Var Film Shift:%f "%(oriFocal, oriExp, oriHFilmShift, oriVFilmShift))

HFoV = GetHFoV(90.0)

cam.SetFocal(HFoV)
#cam.SetExposure(0.0)
cam.SetHorizontalFilmShift (0.0)
cam.SetVerticalFilmShift (0.0)

message = "Render -> External?"
msgRtn = Message(message,"Check!",4)

if msgRtn == 0:
	# set front
	camObj.SetRotationAngles( 90.0, 0.0, 180.0 )
	SetRenderOutput(VuePython.RO_Disk, dirPath +  "/" + fileName + "_front" + "." + extension)
	Render()
	
	print("Close Batch Rendering Window")
	
	# set left
	camObj.SetRotationAngles( 90.0, 0.0, 90.0 )
	SetRenderOutput(VuePython.RO_Disk, dirPath + "/" + fileName + "_left" + "." + extension)
	Render()
	
	print("Close Batch Rendering Window")
	
	# set right
	camObj.SetRotationAngles( 90.0, 0.0, 270.0 )
	SetRenderOutput(VuePython.RO_Disk, dirPath + "/" + fileName + "_right" + "." + extension)
	Render()
	
	print("Close Batch Rendering Window")
	
	# set back
	camObj.SetRotationAngles( 90.0, 0.0, 0.0 )
	SetRenderOutput(VuePython.RO_Disk, dirPath + "/" + fileName + "_back" + "." + extension)
	Render()
	
	print("Close Batch Rendering Window")
	
	# set up
	camObj.SetRotationAngles( 0.0, 0.0, 180.0 )
	SetRenderOutput(VuePython.RO_Disk, dirPath + "/" + fileName + "_up" + "." + extension)
	Render()
	
	print("Close Batch Rendering Window")
	
	# set down
	camObj.SetRotationAngles( 180.0, 0.0, 180.0 )
	SetRenderOutput(VuePython.RO_Disk, dirPath + "/" + fileName + "_down" + "." + extension)
	Render()
	
	print("Close Batch Rendering Window")
	
	# Restore Cam Data
	if oriRenderOutPut == 0:
		SetRenderOutput(VuePython.RO_MainView, dirPath + "/" + fileName)
	elif oriRenderOutPut == 1:
		SetRenderOutput(VuePython.RO_Screen, dirPath + "/" + fileName)
	elif oriRenderOutPut == 2:
		SetRenderOutput(VuePython.RO_Disk, dirPath + "/" + fileName)
	
	cam.SetFocal(oriFocal)
	cam.SetExposure(oriExp)
	cam.SetHorizontalFilmShift (oriHFilmShift)
	cam.SetVerticalFilmShift (oriVFilmShift)
	
	camObj.SetRotationAngles( oriRot[0], oriRot[1],oriRot[2] )
	camObj.SetPosition( oriPos[0],oriPos[1],oriPos[2], false, false )
	
	Message("Finish","OK")
else:
	Message("Cancel","OK")

そんな感じです。
コメント ( 0 )|Trackback ( )
  ・