Ejemplo n.º 1
0
        /// <summary>
        /// Obtém a posição no espaço 2D através da coordenada x e y da tela
        /// </summary>
        /// <param name="cam"></param>
        /// <param name="mouseXY"></param>
        /// <returns>Retorna ponto 2d pela coordenada X e Y da tela</returns>
        public static Eixos2 ObterPosEspaco2DMouseXY(
            this Camera2D cam, Eixos2 mouseXY)
        {
            Vetor2 PosCamZoomDiff = new Vetor2();

            PosCamZoomDiff = cam.Pos / cam.PosZ * cam.ZoomCamera - cam.Pos;

            float x = cam.Left + mouseXY.X + PosCamZoomDiff.X;
            float y = cam.Top + mouseXY.Y + PosCamZoomDiff.Y;

            Vetor2 ponto   = new Vetor2(x * cam.PosZ / cam.ZoomCamera, y * cam.PosZ / cam.ZoomCamera); // Reduz escala para tamanho real em 2D
            Eixos2 ponto2D = Util2D.RotacionarPonto2D(cam.Pos, ponto, cam.Angulo.Z);                   // Rotaciona ponto no tamanho real

            return(ponto2D);
        }
Ejemplo n.º 2
0
        public static PointF ObterXYTelaPeloEspaco2D(this Camera2D cam, Eixos2 pos2D)
        {
            Vetor2 PosCam         = new Vetor2(cam.Pos);
            Vetor2 PosCamZoomDiff = new Vetor2();

            PosCamZoomDiff = cam.Pos / cam.PosZ * cam.ZoomCamera - cam.Pos;

            Vetor2 globalPos = (Vetor2)pos2D * cam.ZoomCamera / cam.PosZ;
            Eixos2 rot       = Util2D.RotacionarPonto2D(PosCam * cam.ZoomCamera / cam.PosZ,
                                                        globalPos, -cam.Angulo.Z);

            PointF pontoTela = new PointF();

            pontoTela.X = -cam.Left - PosCamZoomDiff.X + rot.X;
            pontoTela.Y = -cam.Top - PosCamZoomDiff.Y + rot.Y;

            return(pontoTela);
        }