Prazer em desenvolver software
Colegas, estou com uma grande dificuldade para criar regions sobre uma imagem.
Estou usando DrawPolygon para mapear as coordenadas, mas tem sido bastante trabalhoso conseguir acertar. Usando 4 pontos. Tem sido na exaustiva tentativa e erro. Alguém teria alguma solução, sugestão ou orientação, por gentileza?
Segue a imagem em si e o código que delimita o primeiro campo, primeiro polígono na parte superior esquerda da figura.
protected override void OnPaint(PaintEventArgs e)
{
Point pointBtn1_1 = new Point(104,3);
Point pointBtn1_2 = new Point(104,67);
Point pointBtn1_3 = new Point(78,76);
Point pointBtn1_4 = new Point(34,32);
Point[] curvePoints1 =
{
pointBtn1_1,
pointBtn1_2,
pointBtn1_3,
pointBtn1_4,
};
// Make the GraphicsPath
GraphicsPath polygonPath= new GraphicsPath(FillMode.Winding);
polygonPath.AddPolygon(curvePoints);
// Convert the GraphicsPath into a Region.
Region polygonRegion= new Region(polygonPath);
// Constrain to the region.
this.Region = polygonRegion;
} // -- End OnPaint method
Existe uma informação relevante que pode ajudar a solucionar o problema. Invertendo-se as coordenadas dos pontos (trocando x por y em cada Point), mapeia-se o polígono à centro esquerda da imagem.
Desde já agradeço a quem puder colaborar.
Tags:
Permalink Responder até Bruno Torres Mendes da Silva em 12 outubro 2016 at 1:41
Caro Marcos Mendes,
Para mapear os polígonos do jeito que vc deseja, a melhor forma de se obter os pontos é através da trigonometria. Onde inserimos o raio e o ângulo e através dos seno e cosseno obtemos os pontos x e y.
Eis aqui um simples método para calcular o ponto.
Veja que criei uma struct para ajudar. Depois disso é só substituir os valores nos pontos de sua biblioteca.
public struct Point
{
double x, y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
public double X => x;
public double Y => y;
public override string ToString()
{
return $"X:{x}; Y:{y}";
}
}
public static Point CriarPonto(double angulo, double raio, Point origem)
{
var anguloradiano = (angulo * Math.PI) / 180;
var y = (raio * Sin(anguloradiano)) + origem.Y;
var x = (raio * Cos(anguloradiano)) + origem.X;
return new Point(x, y);
}
Com isso, basta apenas gerar um loop para obter os pontos...
A curvatura dos segmentos, irá depender dessa biblioteca que vc utiliza...No meu caso estou utilizando o UWP, se eu quisesse um perfeito contorno no botões, bastaria apenas trocar o LineSegment por BezierSegment, porem deveria também fazer pequenos ajustes...Mas aqui não vem ao caso...
Veja o resultado do mapeamento de pontos...
pronto, espero que tenha o ajudado...
Se quiser , depois posso com mais calma mostrar o resultado contornando perfeitamente os botões utilizando o BezierSegment para o UWP
Permalink Responder até Marcos Mendes em 18 outubro 2016 at 17:26
Pô Bruno! Obrigado companheiro!
Vou experimentar aqui!!!!
Bruno Torres Mendes da Silva disse:
Caro Marcos Mendes,
Para mapear os polígonos do jeito que vc deseja, a melhor forma de se obter os pontos é através da trigonometria. Onde inserimos o raio e o ângulo e através dos seno e cosseno obtemos os pontos x e y.
Eis aqui um simples método para calcular o ponto.
Veja que criei uma struct para ajudar. Depois disso é só substituir os valores nos pontos de sua biblioteca.
public struct Point
{
double x, y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
public double X => x;
public double Y => y;public override string ToString()
{
return $"X:{x}; Y:{y}";
}
}public static Point CriarPonto(double angulo, double raio, Point origem)
{
var anguloradiano = (angulo * Math.PI) / 180;
var y = (raio * Sin(anguloradiano)) + origem.Y;
var x = (raio * Cos(anguloradiano)) + origem.X;
return new Point(x, y);
}Com isso, basta apenas gerar um loop para obter os pontos...
A curvatura dos segmentos, irá depender dessa biblioteca que vc utiliza...No meu caso estou utilizando o UWP, se eu quisesse um perfeito contorno no botões, bastaria apenas trocar o LineSegment por BezierSegment, porem deveria também fazer pequenos ajustes...Mas aqui não vem ao caso...
Veja o resultado do mapeamento de pontos...
pronto, espero que tenha o ajudado...
Se quiser , depois posso com mais calma mostrar o resultado contornando perfeitamente os botões utilizando o BezierSegment para o UWP
© 2018 Criado por Ramon Durães.
Ativado por