파이썬 마을 게시판 인덱스 파이썬 마을
우리나라 파이썬 사용자들의 이야기 마을
 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 
Google
python.or.kr Web

[VTK강좌] 4.7. Streamlines ... under construction

 
글 쓰기   답변 달기    파이썬 마을 게시판 인덱스 -> 파이썬 팁/강좌/모듈소개 모음
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
jrcho



가입:
올린 글: 56

올리기올려짐: 2004 5월 12 8:35 pm    주제: [VTK강좌] 4.7. Streamlines ... under construction 인용과 함께 답변

...이번 절은 완성되지 않은 겁니다. Streamline은 유체역학에서 사용되는 것입니다. 예전에 대학 전공 수업으로 유체역학을 배웠지만 전혀 기억이 나질 않는 군요. 기억나는 것은 streamline이 있고, 이와 비슷한 streak line, trajectory가 있다는 정도 입니다. 따라서 VTK의 streamline을 계산하는 필터(vtkStreamLine)이 이해가 안되더군요. 앞으로 수정할 수 있으면 하겠습니다(??). 대신 이번절에서 vtkTubeFilter는 선을 튜브형태로 만들어 주기 때문에 가끔 사용되는 유용한 필터 입니다. 사용법을 눈여겨 봐 주십시오.

4.7. Streamlines ... under construction

이 예제는 vtkStreamLine 필터를 이용해 streamline을 생성하는 방법과 vtkTubeFilter를 이용해 보기 좋게 장식하는 방법을 보이고 있다. 먼저, office.binary.vtk 파일에 저장된 사무실의 공기흐름에 대한 CFD(Computational Fluid Dynamics) 해석 결과를 vtkStructuredGridReader로 읽고, Update()를 호출한다. Update()를 미리 호출하는 이유는 rendering전에 데이터로부터 length 등의 값을 얻어야 하기 때문이다. Reader로 읽은 데이터를 이용해 vtkStreamLine 필터로 streamline을 생성하고, 다시 강조하기 위 vtkTubeFilter를 사용한다. 마지막으로 vtkStructuredGridOutlineFilter를 이용해 데이터의 outline을 나타낸다. 이 예제의 원본은 VTKExample/VisualizationAlgorithm에 있는 OfficeTube.py로, 테이블, 창 등은 사무실 내 풍경을 vtkStructuredGridGeometryFilter를 이용하여 나타내어 표시하는데 여기에서는 코드량을 줄이기 위해 이부분을 삭제하여 편집한 것이다.

리스트 4.7.1 StreamLineEx.py
코드:

from vtk import *
from vtk.util.misc import vtkGetDataRoot
from vtk.util.colors import *
VTK_DATA_ROOT = vtkGetDataRoot()

reader = vtkStructuredGridReader()
reader.SetFileName(VTK_DATA_ROOT + "/Data/office.binary.vtk")
reader.Update()

# streamline generation
length = reader.GetOutput().GetLength()

maxVelocity =reader.GetOutput().GetPointData().GetVectors().GetMaxNorm()
maxTime = 35.0*length/maxVelocity

integ = vtkRungeKutta4()
streamer = vtkStreamLine()
streamer.SetInput(reader.GetOutput())
streamer.SetStartPosition(0.1, 2.1, 0.5)
streamer.SetMaximumPropagationTime(500)
streamer.SetStepLength(0.5)
streamer.SetIntegrationStepLength(0.05)
streamer.SetIntegrationDirectionToIntegrateBothDirections()
streamer.SetIntegrator(integ)

# make streamline with tube
streamTube = vtkTubeFilter()
streamTube.SetInput(streamer.GetOutput())
streamTube.SetRadius(0.02)
streamTube.SetNumberOfSides(12)
streamTube.SetVaryRadiusToVaryRadiusByVector()
mapStreamTube = vtkPolyDataMapper()
mapStreamTube.SetInput(streamTube.GetOutput())
mapStreamTube.SetScalarRange(reader.GetOutput().GetPointData().GetScalars().GetRange())
streamTubeActor = vtkActor()
streamTubeActor.SetMapper(mapStreamTube)
streamTubeActor.GetProperty().BackfaceCullingOn()

# outline
outline = vtkStructuredGridOutlineFilter()
outline.SetInput(reader.GetOutput())
mapOutline = vtkPolyDataMapper()
mapOutline.SetInput(outline.GetOutput())
outlineActor = vtkActor()
outlineActor.SetMapper(mapOutline)
outlineActor.GetProperty().SetColor(0, 0, 0)

# grahic stuff
ren = vtkRenderer()
renWin = vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

ren.AddActor(outlineActor)
ren.AddActor(streamTubeActor)

ren.SetBackground(slate_grey)

aCamera = vtkCamera()
aCamera.SetClippingRange(0.726079, 36.3039)
aCamera.SetFocalPoint(2.43584, 2.15046, 1.11104)
aCamera.SetPosition(-4.76183, -10.4426, 3.17203)
aCamera.SetViewUp(0.0511273, 0.132773, 0.989827)
aCamera.SetViewAngle(18.604)
aCamera.Zoom(1.2)

ren.SetActiveCamera(aCamera)
renWin.SetSize(500, 300)

iren.Initialize()
renWin.Render()
iren.Start()



그림 4.7.1 StreamLineEx.py의 실행 모습

다음 예제는 streamline을 생성하여 vtkRuledSurfaceFilter로 강조한 예제이다.

리스트 4.7.2 StreamSurfaceEx.py
코드:

import vtk
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

# Read the data and specify which scalars and vectors to read.
pl3d = vtk.vtkPLOT3DReader()
pl3d.SetXYZFileName(VTK_DATA_ROOT + "/Data/combxyz.bin")
pl3d.SetQFileName(VTK_DATA_ROOT + "/Data/combq.bin")
pl3d.SetScalarFunctionNumber(100)
pl3d.SetVectorFunctionNumber(202)
pl3d.Update()

# We use a rake to generate a series of streamline starting points
# scattered along a line. Each point will generate a streamline. These
# streamlines are then fed to the vtkRuledSurfaceFilter which stitches
# the lines together to form a surface.
rake = vtk.vtkLineSource()
rake.SetPoint1(15, -5, 32)
rake.SetPoint2(15, 5, 32)
rake.SetResolution(21)
rakeMapper = vtk.vtkPolyDataMapper()
rakeMapper.SetInput(rake.GetOutput())
rakeActor = vtk.vtkActor()
rakeActor.SetMapper(rakeMapper)

integ = vtk.vtkRungeKutta4()
sl = vtk.vtkStreamLine()
sl.SetInput(pl3d.GetOutput())
sl.SetSource(rake.GetOutput())
sl.SetIntegrator(integ)
sl.SetMaximumPropagationTime(0.1)
sl.SetIntegrationStepLength(0.1)
sl.SetIntegrationDirectionToBackward()
sl.SetStepLength(0.001)

# The ruled surface stiches together lines with triangle strips.
# Note the SetOnRatio method. It turns on every other strip that
# the filter generates (only when multiple lines are input).
scalarSurface = vtk.vtkRuledSurfaceFilter()
scalarSurface.SetInput(sl.GetOutput())
scalarSurface.SetOffset(0)
scalarSurface.SetOnRatio(2)
scalarSurface.PassLinesOn()
scalarSurface.SetRuledModeToPointWalk()
scalarSurface.SetDistanceFactor(30)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInput(scalarSurface.GetOutput())
mapper.SetScalarRange(pl3d.GetOutput().GetScalarRange())
actor = vtk.vtkActor()
actor.SetMapper(mapper)

# Put an outline around for context.
outline = vtk.vtkStructuredGridOutlineFilter()
outline.SetInput(pl3d.GetOutput())
outlineMapper = vtk.vtkPolyDataMapper()
outlineMapper.SetInput(outline.GetOutput())
outlineActor = vtk.vtkActor()
outlineActor.SetMapper(outlineMapper)
outlineActor.GetProperty().SetColor(0, 0, 0)

# Now create the usual graphics stuff.
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

ren.AddActor(rakeActor)
ren.AddActor(actor)
ren.AddActor(outlineActor)
ren.SetBackground(1, 1, 1)

renWin.SetSize(300, 300)

iren.Initialize()
renWin.Render()
#iren.Start()



그림 4.7.2 StreamSurfaceEx.py
위로
사용자 정보 보기 비밀 메시지 보내기    
이전 글 표시:   
글 쓰기   답변 달기    파이썬 마을 게시판 인덱스 -> 파이썬 팁/강좌/모듈소개 모음 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다



Powered by phpBB © 2001, 2005 phpBB Group
회선/장비: Daum DNA , 관리: 장혜식,서상현