none
Seguimiento de usuarios en un mapa RRS feed

  • Pregunta

  • Buenas tardes a todos,

    Estoy desarrollando una aplicación para el seguimiento de usuarios dentro de una fabrica, nave comercial, etc. Tengo que mostrar por donde pasan los usuarios en sus correspondientes planos de planta. Para probar la recepción de la posición de cada usuario y verlo en un plano, he hecho una pequeña chapuza. He escaneado un plano y lo he puesto de fondo en un panel. He creado un objeto Graphics g, y muestro al usuario de la siguiente forma:

    g.FillEllipse(Brushes.White, new Rectangle(dOperario.CoordenadaAnterior.X, dOperario.CoordenadaAnterior.Y, 10, 10));
    g.FillEllipse(pincel, new Rectangle(dOperario.Coordenada.X, dOperario.Coordenada.Y, 10, 10));
    dOperario.CoordenadaAnterior.X = dOperario.Coordenada.X;
    dOperario.CoordenadaAnterior.Y = dOperario.Coordenada.Y;

    o sea dibujo un punto en azul con las coordenadas del usuario y simulo su avance "borrando" el punto anterior.

    La aplicación tiene que ser capaz de seguir al usuario y si se hace clic en uno cualquiera mostrar información de él.

    Es la primera vez que tengo que realizar una aplicación de este tipo y estoy un poco perdido, si alguien me pudiera indicar dónde encotrar información o indicarme como emprezar, le estaría muy agradecido.

    Gracias

    domingo, 21 de septiembre de 2014 18:25

Todas las respuestas

  • Al círculito lo pintas en el Paint del panel.

    Y no haces un White.

    En la función donde capturas la posición del sujeto, haces un invalidate de las coordenadas x,y,10,10, cuando ocurre el paint, el tipo pinta ese rectángulo con la imagen de fondo, con lo que consigues el efecto de borrado.

    En esa misma función actualizas las coordenadas y haces otro invalidate con las nuevas coordenadas x, y, 10, 10

    Dentro del Paint(), pintas la imagen de la planta, y el círculo con la posición actual. Lo que se pintará efectivamente es todo lo que haya sido invalidado en la ventana, esas dos pequeñas áreas de 10x10.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private Bitmap m_Planta;
            private int m_paso = 10;
            private double m_dirección = 0;
            private Random rnd;
            public Point Pos { get; set; }
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                m_Planta = new Bitmap("imagen.png");
                //panel1.BackgroundImage = m_Planta;
                Pos = new Point(m_Planta.Width / 2, m_Planta.Height / 2);
                rnd = new Random();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                panel1.Invalidate(new Rectangle(Pos.X, Pos.Y, m_paso, m_paso));
    
                //m_dirección = rnd.NextDouble() * 360;
                m_dirección = rnd.NextDouble() * rnd.Next(-3, 3);
    
                Pos = new Point((int)(Math.Cos(m_dirección) * m_paso) + Pos.X, (int)(Math.Sin(m_dirección) * m_paso) + Pos.Y);
    
                panel1.Invalidate(new Rectangle(Pos.X, Pos.Y, m_paso, m_paso));
            }
    
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
                if (m_Planta != null)
                {
                    e.Graphics.DrawImage(m_Planta, 0, 0);
                }
    
                e.Graphics.FillEllipse(Brushes.Red, Pos.X, Pos.Y, m_paso, m_paso);
            }
        }
    
    }


    [W]




    • Editado [Walter] domingo, 21 de septiembre de 2014 21:01
    domingo, 21 de septiembre de 2014 18:48
  • hola

    lo que veo dificil en el planteo que realizas no es tanto el dibujo sino la interaccion al realizar click

    no evaluaste usar algun control que muevas definiendo las coordenadas mediante la propiedad "Location"

    si tienes el power pack de vb.net, trae controles de dibujo para representar un circulo que podrias mover por la imagen

    pero lo mejor es que estos controles tienes eventos que podrias usar para detectar cuando el usuario pulsa sobre estos

    se que con GDI tambien se puede detectar donde se pulsa, pero creo que sera mas complejo que usar un control

    a donde apuntos es que la solucion no necesariamente tienes que ser con GDI dibujando, podrias usar un control moviendolo por el dibujo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 22 de septiembre de 2014 0:56
  • Hace tiempo encontré este control: Cyotek ImageBox Control, el cual me permite hacer zoom, etc. y para el posicionamiento de usuarios cree un componente que posiciono en el mapa cargado en el control anterior. Al componente le paso los datos de información del usuario y cliqueando en el obtengo la informacion de quien es quien y por donde "anda"
    miércoles, 29 de junio de 2016 15:38