PDA

View Full Version : درگ کردن یک دایره روی picture bix



ali_72
دوشنبه 28 اردیبهشت 1394, 12:01 عصر
سلام
روی picturebox چهار خط ترسیم کردم که با هم تشکیل یک 4ضلعی نامنظم را میدن.
روی نقطه ابتدا و انتهای اون هم دایره ترسیم کردم
حالا میخوام این دایره ها قابلیت درگ روی picturebox را داشته باشن و با جابه جا کردن اونها 2 خط متصل به اون ها هم جا به جا شن

کد من برای ترسیم دایره:


CircleF ccCircleF = new CircleF(ul, 2);
img.Draw(ccCircleF, new Bgr(Color.White), 7);


CircleF ccCircleF = new CircleF(ur, 2);
img.Draw(ccCircleF, new Bgr(Color.White), 7);


کد من برای ترسیم خط:

var lineSegment2D = new LineSegment2D(ul, ur);
img.Draw(lineSegment2D, new Bgr(Color.BlueViolet), 2);

ممنون میشم راهنمایی کنید

RmeXXXXXXXXX
دوشنبه 28 اردیبهشت 1394, 18:49 عصر
گام اول: توی رویداد pictureBox1_MouseDown بررسی کن ببین مختصات نقطه کلیک روی دایره هست یا نه: دکمه کلیک موس هم کلیک چپ باشه. اگه نه که خیر و برکت بیا بیرون از متد.
اگه هست مختصات رو توی متغیر عضو (متغیری که در کلاس تعریف شده باشه) ذخیره کن و یه متغیرعضو بولین هم تعریف کن (boo _isDarging) و مقدارش رو true کن تا معلوم بشه که درحال درگ هستیم.
bool و Point _oldLoc
گام دوم: توی رویداد pictureBox1_MouseUp بررسی کن ببین آیا در حال درگ هستیم (isDraging== true ) اگه نه که خیر و برکت بیا بیروم از متد
اگه هست موقعیت جدید موس رو برای دایره در نظر بگیر و شکل رو دوباره ترسیم کن. در این صورت نیازی به مختصات اولیه که در متد قبلی ذخیره کردیم نداریم ولی این کار یکم بی دقتی در تعیین موقعیت جدید ایجاد میکنه مخصوصاً اگه دایره بزرگ باشه. در انتهای متد یادتون باشه حتما _isDarging رو false کنین
برای دقت از فرمول زیر استفاده کن:

if (_isDarging)
{
CircleObj.Left -= _oldLoc.X - e.Location.X;
CircleObj.Top -= _oldLoc.Y - e.Location.Y;
}