環境:Houdini 20.0.751
ツール作業では必須のカメラ注視点を特定の座標に移動させる動作をPythonで再現してみます。
以下のコードはカメラの注視点を(1.0, 0.5, -1.5)に移動させる例です。カメラと注視点の座標関係はそのままに相対的に移動させます。
# 現在のパースビューからビューポートクラス(hou.GeometryViewport)を取得する
cur_desktop = hou.ui.curDesktop()
persp = cur_desktop.paneTabOfType(hou.paneTabType.SceneViewer).curViewport()
# ビューのマトリクスからカメラのワールド座標を抜き出す
viewTransform = persp.viewTransform()
tuples = viewTransform.asTuple()
worldCamPos = hou.Vector3(tuples[12], tuples[13], tuples[14])
# ビューポートクラスからカメラのクラス(hou.GeometryViewportCamera)を取得する
cam = persp.defaultCamera()
camPos = hou.Vector3(cam.translation()) # ローカル座標
camPivotPos = hou.Vector3(cam.pivot()) # ピボット座標
# 現在の注視点座標とカメラ座標から距離を計算する
dist = (camPivotPos - worldCamPos).length()
# ピボット座標を設定して、カメラの位置を動かす
pivot = hou.Vector3(1, 0.5, -1.5)
cam.setPivot(pivot)
cam.setTranslation(pivot + hou.Vector3(0, 0, dist))
※hou.GeometryViewportCameraクラスのtranslation()プロパティはカメラを回転させる前のローカル座標の値と思われる。