public override void Render( IntPtr renderer, IPolygonDrawer visibleFacetDrawer, IPolygonDrawer notVisibleFacetDrawer, Point screenCenter) { RenderObj(renderer, visibleFacetDrawer, notVisibleFacetDrawer, screenCenter, _object); }
public SdlWindow(string title, int screenWidth, int screenHeight) { _title = title; _screenHeight = screenHeight; _screenWidth = screenWidth; _trapezeMoveDirection = MoveDirection.Right; _ellipseMoveDirection = MoveDirection.Left; _rectabgleDrawer = DrawerFactory.SquareDrawer; _trapezeDrawer = DrawerFactory.SquareDrawer; _ellipseDrawer = DrawerFactory.RoundDrawer; }
protected void RenderObj( IntPtr renderer, IPolygonDrawer visibleFacetDrawer, IPolygonDrawer notVisibleFacetDrawer, Point screenCenter, IPolyhedron3D obj) { obj.ProjectVertexesToScreen(_distanceBetweenScreenAndObserver, screenCenter); obj.CalculateVisibilityOfFacets(); foreach (var facet in obj.VisibleFacets) { facet.Projection.Draw(renderer, visibleFacetDrawer); } foreach (var facet in obj.NotVisibleFacets) { facet.Projection.Draw(renderer, notVisibleFacetDrawer); } }
public void Draw(IntPtr renderer, IPolygonDrawer polygonDrawer) { polygonDrawer.Draw(renderer, _edges); }
private void WindowProcedure() { bool exit = false; while (!exit) { SDL.SDL_Event sdlEvent; SDL.SDL_PollEvent(out sdlEvent); switch (sdlEvent.type) { case SDL.SDL_EventType.SDL_QUIT: { exit = true; break; } case SDL.SDL_EventType.SDL_WINDOWEVENT: { switch (sdlEvent.window.windowEvent) { case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED: lock (_workWithFigures) { WindowSizeChanged(); } break; } break; } case SDL.SDL_EventType.SDL_KEYDOWN: { var key = sdlEvent.key; if (!_isTimerWork) { switch (key.keysym.sym) { case SDL.SDL_Keycode.SDLK_w: _currentFigure.Move(MoveDirection.Up); break; case SDL.SDL_Keycode.SDLK_a: _currentFigure.Move(MoveDirection.Left); break; case SDL.SDL_Keycode.SDLK_s: _currentFigure.Move(MoveDirection.Down); break; case SDL.SDL_Keycode.SDLK_d: _currentFigure.Move(MoveDirection.Right); break; case SDL.SDL_Keycode.SDLK_q: _currentFigure.Rotate(RotateDirection.Left); break; case SDL.SDL_Keycode.SDLK_e: _currentFigure.Rotate(RotateDirection.Right); break; } } switch (key.keysym.sym) { case SDL.SDL_Keycode.SDLK_SPACE: ChangeTimerState(); break; case SDL.SDL_Keycode.SDLK_1: _currentFigure = _trapeze; break; case SDL.SDL_Keycode.SDLK_2: _currentFigure = _ellipse; break; case SDL.SDL_Keycode.SDLK_F1: _rectabgleDrawer = DrawerFactory.SquareDrawer; _trapezeDrawer = DrawerFactory.SquareDrawer; _ellipseDrawer = DrawerFactory.RoundDrawer; break; case SDL.SDL_Keycode.SDLK_F2: _rectabgleDrawer = DrawerFactory.UniversalDrawer; _trapezeDrawer = DrawerFactory.UniversalDrawer; _ellipseDrawer = DrawerFactory.UniversalDrawer; break; } break; } case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN: { if (sdlEvent.button.button == SDL.SDL_BUTTON_LEFT) { lock (_workWithFigures) { _currentFigure.MoveTo(sdlEvent.button.x, sdlEvent.button.y); } } break; } } _trapeze.CalculateCurrentEdges(); _ellipse.CalculateCurrentEdges(); PerformClipping(); DrawFigures(); Thread.Sleep(_renderLoopTimeoutMs); } }
public abstract void Render( IntPtr renderer, IPolygonDrawer visibleFacetDrawer, IPolygonDrawer notVisibleFacetDrawer, Point screenCenter);