私は学校の仕事のいくつかの例を作りました。スケーリンググリッドを使用した移動ポイント(リスト内のポイント)
今私は一点で立ち往生しています。相続人は、私が何をする必要があるか
(私の母国LANGで名前とCOMENTSを含むため申し訳ありません)..私は私ができる限りlitlletコードを含めるようにしようとしますが、私は何のすべての必要性を確認していない: をクリックしてポイントを追加できる「ペインティングプログラム」を手に入れた後、それぞれのラインを描画します。私はグリッドをプログラミングし、チェックボックスをチェックすると、rastr(グリッド)リスト内の最も近い可能な点を探し、その座標をマウスでペイントしようとしているポイントに適用します。
また、トラックバーの値でグリッドを拡大縮小することもできます。
ここに私の問題があります:スケーリングしているときに、グリッドでペイントされたポイントを移動する必要があります。私はgrid.X = p.X + trackbarValueの各ポイントに対してただ単に行うことができないので、私は手がかりがありません。 (getingエラー)ここで
は、グリッドや塗装のために私のコードです:ここでは
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);
}
}
は、グリッド内の最も近いものを探していると、その後の座標適用:私のトラックバーイベントも
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();
}
}
を:
private void trackBarGrid_Scroll(object sender, EventArgs e)
{
rastr.Clear();
panel1.Refresh();
}
そしてこの
の私の貧しい試みprivate void trackBarGrid_Scroll(object sender, EventArgs e)
{
foreach (Point p in rastr)
{
p.X += TrackBarValue;
p.Y += TrackBarValue;
}
panel1.Refresh();
}
最後に、「フリーハンド」の絵を保持する必要はありません。私はそのグリッドを使うことができます。ここで
は、いくつかの写真は
私は必死に助けてください:D –
1)あなたの質問を適切な英語に編集してください。これはプロのアーカイブです。 2)あなたのポイントのコーディネートを拡大するには、乗算する必要がありますが、追加する必要はありません。倍率を知っていなければなりません(x方向およびy方向に大きく縮尺を変えた場合)。そして、古い値に倍率を掛けて新しいポイントを取得できます。 – TaW