PDA

View Full Version : کمک برای رسم شکل (تو صفحه شطرنجی)



morrteza323
دوشنبه 11 مرداد 1389, 12:19 عصر
سلام به همه دوستان عزیز
من یه برنامه برای رسم شکل می خوام بنویسم. و می خوام یه صفحه شطرنجی داشته باشم و روی اون بتونم شکل رسم کنم مثل عکسی که براتون گذاشتم.چجوری اینکارو بکنم؟؟؟؟

مهدی رحیم زاده
یک شنبه 17 مرداد 1389, 17:07 عصر
دوست من سلام
برای این کار بسته به این که شما می خوایید با چه کنترلی این کار رو انجام بدید باید اون کنترل رو ببرید توی مد گرافیکی و بعد از دستورات موجود برای رسم خط و ... استفاده کنید .
موفق باشید

morrteza323
یک شنبه 17 مرداد 1389, 17:14 عصر
دوست عزیز من مبتدی هستم.به نظر شما با چه کنترلی کار کنم؟؟

morrteza323
یک شنبه 17 مرداد 1389, 18:16 عصر
دوست من سلام
برای این کار بسته به این که شما می خوایید با چه کنترلی این کار رو انجام بدید باید اون کنترل رو ببرید توی مد گرافیکی و بعد از دستورات موجود برای رسم خط و ... استفاده کنید .
موفق باشید
دوست عزیز من یه نمونه برنامه پیدا کردم.که اون چیزی که مد نظر م هست رو داره.شما قسمت line این برنامه رو نگاه کنید.من از کد های این برنامه چیزی متوجه نشدم.می شه واسم توضیح بدید یا حداقل یه برنامه مثل این برام بنویسید

مهدی رحیم زاده
چهارشنبه 20 مرداد 1389, 00:39 صبح
کد رو گرفتم بررسی کنم براتون میفرستم جواب رو
شرمنده که دیر جواب میدم
سرم خیلی شلوغه
فقط یاد آوری کنید با پیام خصوصی
موفق باشید

shask00l
چهارشنبه 20 مرداد 1389, 01:35 صبح
از اسم فایل معلومه که روی wpf بحث کرده . البته خیلی چیز خوبیه . ولی یکم بد قلقه . تا دستت بیاد 1 هفته ای طول میکشه . اگه عجله داری از توابع خود آبجکت های گرافیکی استفاده کن .

به عنوان مثال برای دسترسی به اینا ساده ترین راه رویداد paint فرم هستش . مثال زیر توی فرم یه خط رسم میکنه .



private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(Pens.Red, 100, 100, 300, 300);
}


البته این قضیه خیلی گسترده تر از این حرف هاست و مثال بالا بیشتر شبیه یه شوخی میمونه .
اگه برات جالب بود بگو تا یه خورده بیشتر ادامه بدم . الآن حوصله تایپ ندارم :خجالت:
در مورد کاری که قراره انجام بدی هم کمی توضیح بده

mohsen.net
چهارشنبه 20 مرداد 1389, 08:48 صبح
اگر اندازه فرم ثابت هست یه عکس بنداز پشت صفحه بعد روش هرچی خواستی رسم کن

morrteza323
شنبه 23 مرداد 1389, 21:47 عصر
از اسم فایل معلومه که روی wpf بحث کرده . البته خیلی چیز خوبیه . ولی یکم بد قلقه . تا دستت بیاد 1 هفته ای طول میکشه . اگه عجله داری از توابع خود آبجکت های گرافیکی استفاده کن .

به عنوان مثال برای دسترسی به اینا ساده ترین راه رویداد paint فرم هستش . مثال زیر توی فرم یه خط رسم میکنه .



private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(Pens.Red, 100, 100, 300, 300);
}


البته این قضیه خیلی گسترده تر از این حرف هاست و مثال بالا بیشتر شبیه یه شوخی میمونه .
اگه برات جالب بود بگو تا یه خورده بیشتر ادامه بدم . الآن حوصله تایپ ندارم :خجالت:
در مورد کاری که قراره انجام بدی هم کمی توضیح بده
با تشکر از شما دوست عزیز.از drawline استفاده کردم.این متد از رنگ کردن پیکسل ها استفاده می کنه و خیلی ساده هست.اگه شما تو برنامه توجه کرده باشید به راحتی می شه خط رسم شده رو انتقال داد و پاک کرد.در صورتی که در drawline اگر خطی رسم شد برای پاک کردن اون باید روی همون خط یه خط دیگه به رنگ فرم رسم کرد تا پاک شه و برای انتقال . . .
امید وارم منظورم رو فهمیده باشید.
در مورد برنامه ای که من می خوام بنویسم.می خوام اشکال هندسی تو صفحه شطرنجی رسم کنم و رو اون محاسبات انجام بدم.کاری که می خوام انجام بدم مثل بازی Bridge Builder هست.اگه لازمه بازی رو براتون ارسال کنم.
منتظر راهنمایی و نظرات قشنگ و استادانه شما هستم.

morrteza323
شنبه 23 مرداد 1389, 21:52 عصر
اگر اندازه فرم ثابت هست یه عکس بنداز پشت صفحه بعد روش هرچی خواستی رسم کن
با اجازه از شما دوست عزیز اینکار رو انجام دادم.فکر کنم کنترل کردنش راحت تره.با متد drawline صفحه رو 50 پیکسل به 50 پیکسل خط کشی کردم.اگه راه بهتری سراغ دارید لطفا بگید.


i = ActiveForm.Width / 50;
for (ii = 0; ii <= i; ii++)
{
formGraphics.DrawLine(myPen, ii * 50, 0, ii * 50, ActiveForm.Height);
if (ii == i / 2)
{
Centerx = i/2;
formGraphics.DrawLine(new Pen(Color.Blue), ii * 50, 0, ii * 50, ActiveForm.Height);
}//end of if i/2
}//end of for
i = ActiveForm.Height / 50;
for (ii = 0; ii <= i; ii++)
{
formGraphics.DrawLine(myPen, 0, ii * 50, ActiveForm.Width, ii * 50);
if (ii == i / 2)
{
Centery = i/2;
formGraphics.DrawLine(new Pen(Color.Blue), 0, ii * 50, ActiveForm.Width, ii * 50);
}//end of if i/2
}//end of for

shask00l
چهارشنبه 27 مرداد 1389, 23:03 عصر
برای اجرای این طرح پیشنهاد میکنم از panel استفاده بکنی . توی panel دقیقا مثل form میتونی خط رسم کنی . دقیقا همون رویداد هارو داره . برای انتقالشون هم میتونی کل panel رو move کنی . نیاز به رسم مجدد نیست . اگه خواستی میتونی امکانات خاص هم بهش اضافه بکنی . مثلا یه usercontrol بسازی که توش یه panel داشته باشه که همراه کنترل تغییر اندازه بده . میتونی برای سایز مربع ها هم یه خصوصیت در نظر بگیری . اگر نیاز به خاصیت snap to grid برای بازیت داری بهتره از روش آخری استفاده کنی .( snap to grid یعنی تقاطع خطوط قابل شناسایی باشه و بتونی مثلا یه سری شئ رو بهشون وصل کنی).

راستی .... لینک این بازیه رو هم بزار ببینیم چیه .. :لبخندساده:

مهدی رحیم زاده
چهارشنبه 27 مرداد 1389, 23:50 عصر
یک نمونه برنامه توی قسمت نمونه برنامه های سی شارپ هست که فک می کنم کارتون رو راه می ندازه .
بنده هم الان نمی تونم براتون نمونه برنامه بزارم به خاطر نگهداری سایت امکانش فراهم نیست.شمارمو اگر نیاز بود بفرمایید تا بدم و تماس بگیرید تا در صورت نیاز راهنمایی کنم
موفق و پیروز باشید

shask00l
پنج شنبه 28 مرداد 1389, 01:20 صبح
این بازی Bridge Builder رو download کردم . حرکت جالبیه . اگه دقیقا منظورت همینه باید اون جریان snap to grid رو حتما در نظر بگیری . ضمنا برای راحتی کار باید هرکدوم از آبجکت ها ( فولاد . کابل و ...) یک کلاس بسازی . دردسر کار اینجوری کمتره .
برای شبیه سازی و فیزیک هیچ نظری ندارم :لبخند:

morrteza323
پنج شنبه 28 مرداد 1389, 12:14 عصر
برای اجرای این طرح پیشنهاد میکنم از panel استفاده بکنی . توی panel دقیقا مثل form میتونی خط رسم کنی . دقیقا همون رویداد هارو داره . برای انتقالشون هم میتونی کل panel رو move کنی . نیاز به رسم مجدد نیست . اگه خواستی میتونی امکانات خاص هم بهش اضافه بکنی . مثلا یه usercontrol بسازی که توش یه panel داشته باشه که همراه کنترل تغییر اندازه بده . میتونی برای سایز مربع ها هم یه خصوصیت در نظر بگیری . اگر نیاز به خاصیت snap to grid برای بازیت داری بهتره از روش آخری استفاده کنی .( snap to grid یعنی تقاطع خطوط قابل شناسایی باشه و بتونی مثلا یه سری شئ رو بهشون وصل کنی).

راستی .... لینک این بازیه رو هم بزار ببینیم چیه .. :لبخندساده:
با تشکر از شما
دوست عزیز من حرفه ای نیستم . می شه یه نمونه درست کنید و اینجا بزارید؟؟؟

shask00l
دوشنبه 01 شهریور 1389, 01:31 صبح
یه کنترل panel بزار روی فرمت و توی رویداد paint مربوط به کنترل این کد رو بنویس .



int scale = 10;
int w = panel1.Width / scale;
int h = panel1.Height / scale;
int i,j;

for(i=0;i<=w;i++)
e.Graphics.DrawLine(Pens.Blue, i * scale, 1, i * scale, this.Height);

for (j = 0; j <= h; j++)
e.Graphics.DrawLine(Pens.Blue, 1, j * scale, this.Width , j * scale);


این کد موقع جابجایی یا resize کردن کنترل مشکلی نداره و با توجه به scale (طول و عرض هر سلول) جدول رو دوباره رسم میکنه . اگه من جای شما بودم برای انجام این کار یه usercontrol درست میکردم که بشه راحت تر باهاش کار کرد. مثلا میشه scale یا رنگ جدول و پس زمینه و ... رو بصورت یه خصوصیت توی usercontrol تعریف کرد. برای پیاده سازی خاصیت snap to grid و رسم اتصالات هم کارتو راحت تر میکنه .

:لبخندساده:

morrteza323
دوشنبه 01 شهریور 1389, 12:07 عصر
دوست عزیزخوب این userControl که درست کردم.چجوری می تونم از داخل فرم تغییر سایز بدمش؟؟شما این برنامه که گذاشتم رو دیدید؟؟؟؟طریقه رسم line رو فهمیدید؟؟؟

shask00l
دوشنبه 01 شهریور 1389, 17:57 عصر
usercontrol مثل تمامی کنترل های دیگه (مثلا textbox) قابلیت تغییر سایز و .. داره . مباحث مربوط به طراحی uc توی سایت مطرح شده (سرچ) .

اون برنامه ای هم که گذاشتید یک مثال کامل از نحوه ی رسم با کمک wpf هست . برنامه ی خیلی کاملیه . اشکال اصلی رو رسم میکنه با قابلیت تغییر رنگ و ... ذخیره کردنشم برداریه . همرو توی یه فایل xml میریزه .

قبلا عرض کردم ..

از اسم فایل معلومه که روی wpf بحث کرده . البته خیلی چیز خوبیه . ولی یکم بد قلقه . تا دستت بیاد 1 هفته ای طول میکشه . اگه عجله داری از توابع خود آبجکت های گرافیکی استفاده کن .

wpf خیلی چیز خوبیه . کارها خیلی قشنگ از آب در میان . ولی یاد گرفتنش یه خورده دردسر داره .
البته این نظر منه .