※ sys.path.append(os.environ['HFS'] + '/houdini/scripts/python')
import hou
- HOM hou -
hou.pwd(function) -> 현재 노드의 위치를 알아온다.
hou.cd(function) -> 현재 위치를 바꾼다.
hou.Node(class)
node(self, node_path) -> node_path 의 노드 이름을 반환한다.
inputs(self) -> input으로 연결된 노드 이름을 반환한다.
setFirstInput(setf,, node_to_become_input, output_index=0) or setFirstInput(self, indirect_to_become_input)
setFirstInput(None) -> 연결된 상위 노드가 끊어진다. unparent가 된다.
children(self) -> 자식 노드를 반환한다.
ex) for i in hou.node('/obj').children():
print i.name()
/obj 하위에 있는 node 이름들을 반환한다.
destroy(self) -> 노드를 삭제한다.
createNode(self, node_type_name, node_name=None, run_init_scripts=True, load_contents=True) -> 노드를 만든다.
parm(self, parm_path) -> 파라미터 값을 가지고 온다.
hou.objNode
worldTransform(self) -> geometry(into world space) 의 위치를 매트릭스로.
set(self, value, language=None) -> 파라미터에 값을 설정한다.
worldTransform 함수를 이용한 예제)
상위 노드와의 연결을 그냥 끊어 버리면, 상속받고있던 노드의 포지션값을 다시 원상태로 돌아간다.
하지만, 밑의 스크립트를 이용하면 상속받고 있던 표지션값을 그대로 유지시키면서 연결을 끊을 수 있다.
def unparentKeepPos(obj_node)
xform = obj_nod.worldTransform()
obj_node.setFirstInput(None)
obj_node.setWorldTransform(xform)
unparantKeepPos(hou.node('/obj/box_object')
toolutils Module
toolutils.sceneView() -> 씬 뷰어 창을 반환한다. (뷰어 창만 관여)
ex) 뷰 창에서 선택한 obj의 경로를 반환하는 예제
scene_viewer = toolutils.sceneViewer()
path = scene_viewer.pwd() -> 씬 뷰어의 네트워크 경로를 가져온다. 만약, /obj/geo1에서 뷰어창이 보인다면, 반환되는 경로는 /obj/geo1 이다.
obj = scene_viewer.selectObjects(quick_select = True)[-1] -> 뷰 창에서 원하는 것을 선택할 수 있도록 해준다.
ex) 뷰 창에서 선택한 것의 노드를 상위노드와 연결 해제한다. 그러면서 상속받은 값 유지시키는 예제
viewer = toolutils.sceneViewer()
obj_name = viewer.selectObjects(quick_select=True)[-1]
unparentAndKeepPos(obj_name)
hou.SceneViewer
selectObjects(self, prompt='Select objects', sel_index=0, allow_drag=False, quick_select=False, use_existing_selection=True, allow_multisel=True, allowed_types=('*',), icon=None, label=None) : viewer에서 오브젝트를 선택하는 넘인데... 정확한 설명이 없당 된장 추측은 prompt는 viewer에서 뭘 하라고 하는 메세지를 출력 해주는 거 같고, quick_select=True 하면 선택을 use_existing_selection=False하면 이미 선택된 넘들은 무시하라는 뜻인듯...
hou.SceneViewer.selectObjects(quick_select=True)[-1]
대략 이런 식이면 이런 에러 메시지가
TypeError: unbound method selectObjects() must be called with SceneViewer instance as first ar
gument (got nothing instead)
그래서
import toolutils
viewer = toolutils.sceneViewe()
node1 = viewer.selectObjects(quick_select=True)[-1] <-- 아무것도 선택이 되어져 있지 않을 경우
node2 = viewer.selectObjects(use_existing_selection=False, quick_select=True)[-1] <-- 뭔가가 선택되어져 있을 경우 무시하고 다시 선택하는 경우
----------------------------------------------------------------------------------------------
standalone
CentOS 5.1 x86_64
Python 2.5
$ cd /opt/hfs10.0.465/
$ source houdini_setup_bash
import sys, os
sys.path.append(os.environ['HFS'] + '/houdini/scripts/python')
import hou
import hou 에서
ImportError: libpython2.5.so.1.0: cannot open shared object file: No such file or directory 이런 에러라면
/opt/hfs10.0.465/python/lib/libpython2.5.so.1.0 를
Houdini DSO - error on '/opt/hfs10.0.465/houdini/dso/audio/CL_AudiereClipReader.so'
libaudiere-1.9.4.so: cannot open shared object file: No such file or directory 이런 에러라면
/opt/hfs10.0.465/dsolib/libaudiere-1.9.3.so 를
LD_LIBRARY_PATH에 추가 해 주어야 한다
걍 이런게 귀찮다면
$ export LD_LIBRARY_PATH=/opt/hfs10.0.465/python/lib:/opt/hfs10.0.465/dsolib:$LD_LIBRARY_PATH
----------------------------------------------------------------------------------------------
Geo convert - hom standalone
준비할 것들에 대해서
console 을 실행합니다
$ cd /opt/hfs10.0.465/
$ source houdini_setup_bash
$ export LD_LIBRARY_PATH=/opt/hfs10.0.465/python/lib:/opt/hfs10.0.465/dsolib
여기 까지 하면 후디니를 파이썬에서 넌구이 버전으로 실행이 가능해 집니다
확인 방법은
$ python
>>> import sys, os
>>> sys.path.append(os.environ['HFS'] + '/houdini/scripts/python')
>>> import hou
>>>
import hou 했을 때 에러가 없어야 합니다
참고 하세요
위와 같은 환경 셋팅이 되면 구이버전 후디니가 안됩니다
리눅스에서만 해봤습니다 ubuntu9.10 64bit
파이썬 버전이 틀려도 됐습니다 후디니파이썬2.5.2 리눅스설치된파이썬2.6.4
실행 방법
usage : ./geoCutting.py [hip file] [geo path] [cutting box file] [output]
[hip file] : 포인트들과 컷팅박스가 있는 후디니 화일입니다
/home/pinkclear/ntfsData/WORK/Project/FLD047/pointCutting.hip
[geo path] : 컨버팅 하기 전 원본 geo 가 있는 디렉토리입니다 컨버팅할 geo만 있는게 좋습니다
/home/pinkclear/ntfsData/WORK/Project/FLD047/original_geo
[cutting box file] : 컷팅박스 geo 화일입니다
/home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_box.geo
[output] : 컷팅 박스로 잘려진 포인트들의 geo 가 저장될 디렉토리입니다
/home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_geo
./geoCutting.py /home/pinkclear/ntfsData/WORK/Project/FLD047/pointCutting.hip /home/pinkclear/ntfsData/WORK/Project/FLD047/original_geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_box.geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_geo
전체적인 명령은 이렇게 됩니다
$ ./geoCutting.py
라고만 하면 간단 설명이 나옵니다
usage : ./geoCutting.py [hip file] [geo path] [cutting box file] [output]
sample : ./geoCutting.py /home/pinkclear/ntfsData/WORK/Project/FLD047/pointCutting.hip /home/pinkclear/ntfsData/WORK/Project/FLD047/original_geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_box.geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_geo
이렇게
※ Help에서 "feedloader" 검색하여 알아보기.