728x90
class Program { static vtkRenderer ren; static vtkRenderWindow renWin; static vtkRenderWindowInteractor iren; static void Main(string[] args) { vtkSphereSource sphere = vtkSphereSource.New(); vtkPolyDataMapper sphereMapper = vtkPolyDataMapper.New(); sphereMapper.SetInputConnection(sphere.GetOutputPort()); vtkActor sphereActor = vtkActor.New(); sphereActor .SetMapper( sphereMapper); sphereActor .SetOrigin (2, 1, 3);; sphereActor .RotateY (6); sphereActor .SetPosition (2.25, 0, 0); sphereActor. GetProperty ().SetColor (1, 0, 1); vtkCubeSource cube = vtkCubeSource.New(); vtkPolyDataMapper cubeMapper = vtkPolyDataMapper.New(); cubeMapper.SetInputConnection(cube.GetOutputPort()); vtkActor cubeActor = vtkActor.New(); cubeActor.SetMapper(cubeMapper); cubeActor.SetPosition(0.0, 0.25, 0); cubeActor.GetProperty().SetColor(0,0,1); vtkConeSource cone = vtkConeSource.New(); vtkPolyDataMapper coneMapper = vtkPolyDataMapper.New(); coneMapper.SetInputConnection(cone.GetOutputPort()); vtkActor coneActor = vtkActor.New(); coneActor.SetMapper(coneMapper); coneActor.SetPosition(0,0,.25); coneActor.GetProperty().SetColor(0,1,0); vtkCylinderSource cylinder = vtkCylinderSource.New(); vtkPolyDataMapper cylinderMapper = vtkPolyDataMapper.New(); cylinderMapper.SetInputConnection(cylinder.GetOutputPort()); vtkPolyDataMapper.SetResolveCoincidentTopologyToPolygonOffset(); vtkActor cylinderActor = vtkActor.New(); cylinderActor.SetMapper(cylinderMapper); cylinderActor.GetProperty().SetColor(1,0,0); /// Assembly 만들기 vtkAssembly assembly = vtkAssembly.New(); assembly.AddPart(cylinderActor); assembly.AddPart(sphereActor); assembly.AddPart(cubeActor); assembly.AddPart(coneActor); assembly.SetOrigin(5,10,15); assembly.AddPosition(5,0,0); assembly.RotateX(15); ren = vtkRenderer.New(); renWin = vtkRenderWindow.New(); iren = vtkRenderWindowInteractor.New(); ren.SetBackground(.1,.2,.4); ren.AddActor(assembly); renWin.AddRenderer(ren); renWin.SetSize(400,400); iren.SetRenderWindow(renWin); ren.AddActor(coneActor); vtkCamera camera = vtkCamera.New(); camera .SetClippingRange( 21.9464, 30.0179 ); camera .SetFocalPoint ( 3.49221, 2.28844, -0.970866 ); camera .SetPosition (3.49221, 2.28844, 24.5216 ); camera .SetViewAngle (30 ); camera .SetViewUp (0, 1, 0 ); ren.SetActiveCamera(camera); iren.Initialize(); iren.Start(); ren.Dispose(); renWin.Dispose(); iren.Dispose(); sphere.Dispose(); sphereMapper.Dispose(); sphereActor.Dispose(); cone.Dispose(); coneMapper.Dispose(); coneActor.Dispose(); cylinder.Dispose(); cylinderMapper.Dispose(); cylinderActor.Dispose(); cube.Dispose(); cubeActor.Dispose(); cubeMapper.Dispose(); camera.Dispose(); assembly.Dispose(); } }
Assembly는 여러 actor를 종합적으로 갖고 있다.
Assembly만 renderer 에 추가하면 자동으로 아래 레벨에 있는 actor들을 renderer 에 추가한다.
Assembly를 변경하면 안에 있는 모든 actors는 영향을 받는다. 홀로 추가된 coneActor를 개별적으로 제어를 하면 Assembly에 포함되어 있는 actor에도 영향을 준다.
Assembly에 포함된 actor는 weak reference로 참조 되고 있다는 것을 알수가 있다.
728x90
728x90