Ejemplo n.º 1
0
 public override void Render(
     IntPtr renderer,
     IPolygonDrawer visibleFacetDrawer,
     IPolygonDrawer notVisibleFacetDrawer,
     Point screenCenter)
 {
     RenderObj(renderer, visibleFacetDrawer, notVisibleFacetDrawer, screenCenter, _object);
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 public void Draw(IntPtr renderer, IPolygonDrawer polygonDrawer)
 {
     polygonDrawer.Draw(renderer, _edges);
 }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
 public abstract void Render(
     IntPtr renderer,
     IPolygonDrawer visibleFacetDrawer,
     IPolygonDrawer notVisibleFacetDrawer,
     Point screenCenter);