VTKinPython


jrcho님이 파이썬 마을에 연재하셨던 VTK 강좌 가운데 SonDon에게 필요한 부분을 임시로 정리하기 위한 페이지.
Using VTK Through Python보다 훨씬 자세하고 친절한 강좌였음.
(참고로, VTK와 OpenGL의 관계는 LaTexTeX의 관계와 비슷하다고 생각하면 OK) ==


  • 우선 vtk 모듈의 업로드는 한 줄이면 끝. C++처럼 해당 클래스의 헤더 파일을 다 언급할 필요가 없음.
> import vtk
  • 가시적 객체의 생성 : syntaxhighlight → mapper → actor → renderer → render window
import vtk

# syntaxhighlight
cone = vtk.vtkConeSource()
cone.SetHeight( 3.0 )
cone.SetRadius( 1.0 )
cone.SetResolution( 10 )

# mapper
coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInput(cone.GetOutput())

# actor
coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)

# renderer
ren1 = vtk.vtkRenderer()
ren1.AddActor(coneActor)
ren1.SetBackground(0.1, 0.2, 0.4)

# render window
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)

# render window interactor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

iren.Initialize()
iren.Start()
    • VTK의 주요 객체 : syntaxhighlight, mapper, actor, renderer, render window
      • Source는 말 그대로 데이터 소스 정도로 이해하면 된다. Source 객체는 외부 파일에서 데이터를 읽어 들이거나 스스로 생성하는 기능을 한다.
      • Filter는 syntaxhighlight의 입력을 받아 어떤 연산을 하고 그 연산 결과를 mapper로 출력하는 기능을 하는 객체를 의미한다.
      • Mapper는 actor 객체의 geometric representation을 정의하는 객체를 의미한다. 구체적으로 설명하면, syntaxhighlight에서 정의된 자료를 표현할 graphics primitives로 매핑하는 인터페이스를 지정하는 역할을 하는 것이다.
      • Actor는 sence에 그려지는 개개의 객체를 나타내는 말이다. Actor는 자신의 geometry와 property를 가지게 되는데 이중 geometry를 표현하는 것이 mapper 인 것이다.
      • Renderer는 광원, 카메라, 액터를 포함하는 하나의 렌더링 프로세스를 관리하는 객체이다.
      • Render window는 Windows의 윈도나 X-Wndows의 윈도와 동일. vtkRenderWindow는 renderer가 렌더링한 이미지를 컴퓨터 화면의 윈도와 연결하여 관리하는 객체이다.
    • syntaxhighlight로 생성된 데이타 소스가 추상적 객체라면, mapper는 이를 graphical primitives로 변환하여 가시적 객체로 mapping (actor의 기하학적 표현 담당)
    • 화면 상에 나타나는 개개의 객체를 지칭하는 것이 actor (scene에 그려지는 개개의 객체) ; mapper의 output = actor
    • renderer는 만들어진 actor를 이미지로 변환하여 화면에 뿌려주는 것으로, 그냥 모니터에 표시되는 뷰 정도로 이해
    • render window는 이 뷰를 포함하는 window. 자신에게 연결된 하나이상의 renderer를 화면의 특정위치에 나타나도록 관리.
  • 이벤트 처리
    • VTK는 command/observer 디자인 패턴을 이용 : Observer는 VTK의 최상위 클래스인 vtkObject에서 상속받은 모든 클래스가 호출하는 특정 이벤트를 감시
    • Observer의 등록은 AddObserver에서
    • 파이썬에서 이벤트는 상수가 아닌 문자열로 처리해야 함
# renderer에 StartEvent에 대한 콜백 함수 등록
#  -> StartEvent가 발생할 때마다 myCallback 함수가 수행됨
ren1.AddObserver("StartEvent", myCallback)
  • Interactor 객체
    • vtkRenderWindowInteractor 클래스 및 이로부터 상속된 클래스의 객체를 의미
    • render window에 마우스 이벤트나 키보드 이벤트가 발생하게 되면, 적절한 vtkInteractorStyle 객체를 찾아 이벤트를 전달
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}