Ich mache einige Beispiele für meine Schularbeit.Bewegungspunkte mit Skalierungsgitter (Punkte in Liste)
Jetzt bin ich an einem Punkt fest. Ich werde versuchen, so litllet Code enthalten, wie ich kann, aber ich bin nicht sicher, was Sie alle brauchen ..
(sorry für Namen und coments in meiner Mutter lang einschließlich)
Heres, was ich tun muss: Ich habe mein "Malprogramm", wo Sie Punkte hinzufügen können, indem Sie auf klicken und dann Linien aneinander zeichnen. Ich programmierte ein Raster und wenn Sie ein Kontrollkästchen aktivieren, sucht es nach dem nächsten möglichen Punkt in der Raster-Liste und wendet dann seine Koordinaten auf den Punkt an, den Sie mit der Maus malen möchten.
Sie können dieses Raster auch nach Trackbar-Werten skalieren.
Jetzt kommt mein Problem: Ich muss meine gemalten Punkte mit dem Raster bewegen, wenn ich es skaliere. Ich habe keine Ahnung, da ich einfach für jeden Punkt in Gitter tun kann. X = p.X + trackbarValue. (Geting Fehler)
Hier ist mein Code für Raster und Malerei:
List<Point> rastr = new List<Point>(); //rastr means grid
List<Point> body = new List<Point>(); //painting poits
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics kp = e.Graphics;
foreach (Point p in body)
{
kp.FillEllipse(st, p.X-s/2, p.Y-s/2, s, s);
}
//double buffer nezapomenout
if (body.Count>1)
{
kp.DrawLines(pero, body.ToArray());//to array prevedeni na pole
}
for (int x = 0; x < panel1.Width; x += trackBarGrid.Value)
for (int y = 0; y < panel1.Height; y += trackBarGrid.Value)
{
if (showGrid == true)
{
kp.FillEllipse(grid, x-2, y-2, 4, 4);
}
Point gridpoint = new Point(x,y);
rastr.Add(gridpoint);
}
}
Hier wird für die nächsten ein in Raster suchen und dann die Anwendung Koordinaten:
private void panel1_MouseClick(object sender, MouseEventArgs e)
{
if (useGrid == true)
{
//rozjedu cykly abych nasel nejblizsi bod (porovnavat jednotlivy koordinace)
foreach (Point p in rastr)
{
if (e.Location.X - p.X < trackBarGrid.Value/2) //kdyz odecteme pozici bodu v listu rastr.x od pozice x kliknuti nesmi byt vetsi nez polovina delky odsazeni rastrovych bodu
if (e.Location.Y - p.Y < trackBarGrid.Value/2) // to same jen s pozici Y
{
Point zapsat = new Point(p.X, p.Y);
body.Add(zapsat); //od tyhle pozice najit nejblizsi point v gridu
break;//bod jsme uspesne nasli. Nyni musime cyklus uzavrit aby se nezacli pridavat body ktere nechceme
}
}
panel1.Refresh();
}
else {
body.Add(e.Location);
panel1.Refresh();
}
}
mein trackbar Veranstaltung auch:
private void trackBarGrid_Scroll(object sender, EventArgs e)
{
rastr.Clear();
panel1.Refresh();
}
Und mein armer Versuch auf dieser
private void trackBarGrid_Scroll(object sender, EventArgs e)
{
foreach (Point p in rastr)
{
p.X += TrackBarValue;
p.Y += TrackBarValue;
}
panel1.Refresh();
}
Eine letzte Anmerkung, dass ich diese "freihändige" Malerei nicht behalten muss. Ich kann dieses Gitter einfach benutzen.
Hier sind einige Bilder ..
Bitte helfen Sie im verzweifelt: D –
1) Bitte bearbeiten Sie Ihre Frage zu richtigen Englisch; Dies ist ein professionelles Archiv. 2) Um die Koordinaten Ihrer Punkte zu skalieren, müssen Sie multiplizieren, nicht hinzufügen. Sie müssen den Skalierungsfaktor (oder die Faktoren kennen, wenn Sie in x- und y-Richtung unterschiedlich skalieren). Dann können Sie die neuen Punkte erhalten, indem Sie die alten Werte mit den Skalierungsfaktoren multiplizieren. – TaW