elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Dibujar medio círculo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dibujar medio círculo  (Leído 3,015 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Dibujar medio círculo
« en: 21 Enero 2023, 17:12 pm »

Buenas:



Como se puede ver en la imagen, hay un círculo blanco y dentro una flecha negra. La flecha puedes moverla desde los 90º pasando por 0º hasta los -90º. La mitad del círculo hacia abajo no quiero que aparezca, solo medio círculo.

Lo he trabajado con GDI+ .net 4.8.

¿Es posible conseguirlo hacer como pido?

Código C# hecho hasta ahora.

Código
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Drawing2D;
  4. using System.Reflection;
  5. using System.Windows.Forms;
  6.  
  7. namespace GDI_circulo_flecha_02
  8. {
  9.    public partial class Form1 : Form
  10.    {
  11.        public int x2 = 0;
  12.        public Form1()
  13.        {
  14.            InitializeComponent();
  15.        }
  16.  
  17.  
  18.        private void Form1_Load(object sender, EventArgs e)
  19.        {
  20.            // Configuramos el o los controles como inicio.
  21.  
  22.            // trackBar1.
  23.            trackBar1.Minimum = 0;          // 0 grados.
  24.            trackBar1.Maximum = 180;        // 180 grados.
  25.            trackBar1.Value = 90;           // 90 grados.
  26.            trackBar1.LargeChange = 0;      // Precisión.
  27.            x2 = 270;                       // 270º.
  28.  
  29.            // Form1.
  30.            this.BackColor = Color.GreenYellow;   // Fondo verde amarillo.
  31.        }
  32.  
  33.        private void panel1_Paint(object sender, PaintEventArgs e)
  34.        {
  35.            typeof(Panel).InvokeMember("DoubleBuffered",
  36.            BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
  37.            null, (Panel)sender, new object[] { true });
  38.  
  39.            // Crear brocha sólida color blaco.
  40.            SolidBrush fondoBlanco = new SolidBrush(Color.White);
  41.  
  42.            // Crear localización y tamaño del eclipse.
  43.            int anchura_x1 = 0;
  44.            int altura_y1 = 0;
  45.            int anchura_x2 = 100;
  46.            int altura_y2 = 100;
  47.  
  48.            // e.Graphics.TranslateTransform(75, 75); // Algún margen.
  49.  
  50.            // Dibujamos un círculo blanco.
  51.            e.Graphics.FillEllipse(fondoBlanco, anchura_x1, altura_y1, anchura_x2, altura_y2);
  52.  
  53.            // Fleccha que se mueve de 0 a 180 grados.
  54.            Pen pen = new Pen(Color.Black, 8)       // Color negro y el 8 es el grosor de la flecha.
  55.            {
  56.                StartCap = LineCap.RoundAnchor,     // Anclar en el inicio.
  57.                EndCap = LineCap.ArrowAnchor        // Flecha en el final.
  58.            };
  59.            e.Graphics.TranslateTransform(50, 50);  // Origen de coordenadas.
  60.            e.Graphics.RotateTransform(x2);         // Rotación.
  61.            e.Graphics.DrawLine(pen, 0, 0, 50, 0);  // Dibujar línea.
  62.        }
  63.  
  64.        private void trackBar1_Scroll(object sender, EventArgs e)
  65.        {
  66.            // Quita el declarador del tipo, si no ocultas la variable que querías usar.
  67.            x2 = 180 + trackBar1.Value;             // 0 grado = trackbar maximun.
  68.            panel1.Invalidate();                    // Redibujar.
  69.            label_grados.Text = x2.ToString();
  70.        }
  71.    }
  72. }

Saludos


En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Dibujar medio círculo
« Respuesta #1 en: 22 Enero 2023, 07:59 am »

Hecho.
Código
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Drawing2D;
  4. using System.Reflection;
  5. using System.Windows.Forms;
  6. using static System.Windows.Forms.VisualStyles.VisualStyleElement;
  7.  
  8. namespace GDI_circulo_flecha_02
  9. {
  10.    public partial class Form1 : Form
  11.    {
  12.        // Variables.
  13.        SemiCírculo sc;
  14.        public int x2 = 0;
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        private void Form1_Load(object sender, EventArgs e)
  21.        {
  22.            // Configuramos el o los controles como inicio.
  23.  
  24.            // trackBar1.
  25.            trackBar1.Minimum = 0;          // 0 grados.
  26.            trackBar1.Maximum = 180;        // 180 grados.
  27.            trackBar1.Value = 90;           // 90 grados.
  28.            trackBar1.LargeChange = 0;      // Precisión.
  29.            x2 = 270;                       // 270º.
  30.  
  31.            // Form1.
  32.            this.BackColor = Color.GreenYellow;   // Fondo verde amarillo.
  33.  
  34.            // Crear brocha sólida color blaco.
  35.            SolidBrush fondoBlanco = new SolidBrush(Color.White);
  36.  
  37.            // Crear localización y tamaño del eclipse.
  38.            int anchura_x1 = 0;
  39.            int altura_y1 = 0;
  40.            int anchura_x2 = 100;
  41.            int altura_y2 = 100;
  42.  
  43.            sc = new SemiCírculo(fondoBlanco, anchura_x1, altura_y1, anchura_x2, altura_y2);
  44.        }
  45.  
  46.        private void panel1_Paint(object sender, PaintEventArgs e)
  47.        {
  48.            typeof(Panel).InvokeMember("DoubleBuffered",
  49.            BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
  50.            null, (Panel)sender, new object[] { true });
  51.  
  52.            // e.Graphics.TranslateTransform(75, 75); // Algún margen.
  53.  
  54.            // Dibujamos un círculo blanco.
  55.            sc.Dibujar(e.Graphics);
  56.  
  57.            // Fleccha que se mueve de 0 a 180 grados.
  58.            Pen pen = new Pen(Color.Black, 8)        // Color negro y el 8 es el grosor de la flecha.
  59.            {
  60.                StartCap = LineCap.RoundAnchor,     // Anclar en el inicio.
  61.                EndCap = LineCap.ArrowAnchor        // Flecha en el final.
  62.            };
  63.            e.Graphics.TranslateTransform(50, 50);  // Origen de coordenadas.
  64.            e.Graphics.RotateTransform(x2);         // Rotación.
  65.            e.Graphics.DrawLine(pen, 0, 0, 50, 0);  // Dibujar línea.
  66.        }
  67.  
  68.        private void trackBar1_Scroll(object sender, EventArgs e)
  69.        {
  70.            // Quita el declarador del tipo, si no ocultas la variable que querías usar.
  71.            x2 = 180 + trackBar1.Value;             // 0 grado = trackbar maximun.
  72.            panel1.Invalidate();                    // Redibujar.
  73.            label_grados.Text = x2.ToString();
  74.        }
  75.  
  76.    }
  77.  
  78.    class SemiCírculo
  79.    {
  80.        GraphicsPath gp;
  81.        SolidBrush fondo;
  82.        Pen trazo;
  83.  
  84.        public SemiCírculo(SolidBrush fondo, int x, int y, int ancho, int alto)
  85.        {
  86.            gp = new GraphicsPath();
  87.  
  88.            gp.AddArc(x, y, ancho, alto, 180, 180);
  89.            gp.CloseFigure();
  90.  
  91.            this.fondo = fondo;
  92.  
  93.            trazo = new Pen(fondo, 2)
  94.            {
  95.                Alignment = PenAlignment.Inset
  96.            };
  97.        }
  98.  
  99.        // Dibujar trazo y fondo.
  100.        public void Dibujar(Graphics g)
  101.        {
  102.            g.DrawPath(trazo, gp);
  103.            g.FillPath(fondo, gp);
  104.        }
  105.    }
  106. }
  107.  


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Circulo de Oro 2006
Diseño Gráfico
Azielito 0 1,887 Último mensaje 20 Octubre 2006, 18:25 pm
por Azielito
[AYUDA] Dibujar Punto en medio de la pantalla
Programación Visual Basic
sebah97 2 10,614 Último mensaje 1 Octubre 2010, 22:00 pm
por Psyke1
Matemática - Círculo unitario
Dudas Generales
criskapunk 1 18,472 Último mensaje 12 Marzo 2011, 03:01 am
por Ferno
¿como dibujar un circulo pixel a pixel? VB 6.0
Programación Visual Basic
AlxSpy 6 13,554 Último mensaje 28 Mayo 2011, 18:48 pm
por AlxSpy
Círculo para dibujar una luna
Programación C/C++
georginho30 4 3,141 Último mensaje 5 Noviembre 2020, 21:09 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines