تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] رسم بيت بشكل هندسي في C#
#1
Photo 
اخوتي أعزاء في منتدى فيجول بيسك المحترم
طلب مني كمشروع في بيئة سي شارب رسم هندسي يظهر في لفورم
يكون الرسم على شكل بيت مؤلف من دوائر ومربعات وخطوط. واذا لم يكن بالاستطاع رسم، ارجو ارشادي على الاكواد
ارجو الاطلاع على الرسم التوضيحي في الأسفل
[img=12x12] [/img]
الرد }}}}
تم الشكر بواسطة:
#2
الرسم في بيئة سي شارب (في بيئة الدوت نت عموماً) موضوع كبير جداً
وما سأذكره هنا سوى جزء بسيط جداُ يصلح عادة للمبتدئين

--------------------------------------
يحتاج الرسم في الدوت نت بشكل أساسي لأمرين:
الأول Bitmap وهي مساحة في الذاكرة تعادل المساحة المطلوبة للرسم فيها وتحدد بالعرض Width والارتفاع Height
الثاني Graphics وهي لوحة الرسم وهي تحتوي على أدوات الرسم من ألوان وأقلام وفرش وأوامر رسم وتعبئة وإلخ
كود :
Bitmap bmp = new Bitmap(500, 500);
Graphics g = Graphics.FromImage(bmp);

--------------------------------------
الأقلام والفراشي والألوان

القلم Pen وفيه خصائص كثيرة منها تحديد اللون Color وتحديد سماكة خط الرسم Width ونوع رأس الخط ونوع نهاية الخط (مثل السهم)
وهذا أبسط مثال
كود :
Color.Red

اللون Color وهو معروف
وهذا أبسط مثال
كود :
Color.Red


الفرشاة SolidBrush وتستخدم غالبا لملئ شكل وتحتاج لتحديد اللون  مثل (ولها خصائص كثيرة متقدمة منها تعدد الألوان)
وهذا أبسط مثال
كود :
SolidBrush brush = new SolidBrush(Color.Red);

-------------------------------------------
النقطة والحجم

تحتاج لتحديد إحداثيات نقطة ما Point من أجل الرسم وتتطلب قيمتين x,y مثل
وهذا أبسط مثال
كود :
Point pnt = new Point(200, 100)

ويجب معرفة الحجم Size والذي يتطلب العرض Width والارتفاع Height
وهذا أبسط مثال
كود :
Size sz = new Size(500, 500);

المستطيل Rectangle ويتطلب تحديد الموقع بالنقطة Point والمساحة بالحجم Size
وهذا أبسط مثال
كود :
Rectangle rect = new Rectangle( new Point(0,0), new Size(200,200));

-------------------------------------
أوامر الرسم

من أوامر الرسم ما يشترط القلم Pen والتي تكون عادة لرسم الأشكال الخطية المفرغة
ومنها ما يشترط SolidBursh وعادة ذلك لتعبئة الأشكال المغلقة

أمر الرسم للأشكال المفرغة يبدأ بكلمة Draw وأمر الرسم للأشكال الممتلئة يبدأ بكلمة Fill

-------------------------------------------
أمر رسم الأشكال المفرغة يبدأ بكلمة Draw

رسم الخط DrawLine  وتحتاج لقلم Pen ونقطتين Point
وهذا أبسط مثال
كود :
g.DrawLine(new Pen(Color.Green), new Point(0, 100), new Point(200, 100));

رسم الخطوط DrawLines تعتمد على مجموعة إحداثيان Point
وهذا أبسط مثال
كود :
Point[] pnts = { new Point(0, 100), new Point(100, 0), new Point(200, 100), new Point(0, 100) };
g.DrawLines(new Pen(Color.Green), pnts);

رسم المضلع DrawPolygon وهي تشبه الخطوط Lines ولكنه شكل مغلق أي أنه سيقوم من تلقائياً بوصل آخر نقطة بأول نقطة
وهذا أبسط مثال
كود :
Point[] pnts = { new Point(0, 100), new Point(100, 0), new Point(200, 100) };
g.DrawPolygon(new Pen(Color.Blue), pnts);


رسم المستطيل DrawRectangle ويطلب تحديد المستطيل Rectangle المشروح سابقاً
وهذا أبسط مثال
كود :
Rectangle rect = new Rectangle( new Point(10,10), new Size(100,100));
g.DrawRectangle(new Pen(Color.Green), rect);

رسم الشكل البيضاوي DrawEllipse يطلب مثل المستطيل Rectangle لتحديد المساحة المراد الرسم فيها
وكما تم شرحه سابقا بإن Rectangle يطلب الحجم Size فلو وضعنا العرض Widh واللارتفاع Height بقيم متساوية سيكون الشكل دائرة تماماً
وهذا أبسط مثال
كود :
Rectangle rect = new Rectangle( new Point(10,10), new Size(100,100));
g.DrawEllipse(new Pen(Color.Red), rect);

-------------------------------------------
أمر رسم الأشكال الممتلئة يبدأ بكلمة Fill

وهي تشبه السابق بخلاف أنها تحتاج للفرشاة SolidBrush

-------------------------------------------

ولا يسع الوقت لشرح الباقي

----------------------------------------------



كود :
private void button1_Click(object sender, EventArgs e)
{
   Bitmap bmp = new Bitmap(500, 500);
   Graphics g = Graphics.FromImage(bmp);

   {   // رسم المثلث
       Point[] pnts = { new Point(0, 50), new Point(50, 0), new Point(100, 50), new Point(0, 50) };
       g.DrawLines(new Pen(Color.Green), pnts);
   }

   {   // رسم الدائرة
       Rectangle rect = new Rectangle(new Point(40, 20), new Size(20, 20));
       g.DrawEllipse(new Pen(Color.Red), rect);
   }

   {   // رسم مربع المنزل
       Rectangle rect = new Rectangle(new Point(0, 50), new Size(100, 100));
       g.DrawRectangle(new Pen(Color.Blue), rect);
   }

   {   // رسم الباب
       Rectangle rect = new Rectangle(new Point(30, 100), new Size(20, 50));
       g.DrawRectangle(new Pen(Color.Green), rect);
   }

   {   // رسم النافذة
       Rectangle rect = new Rectangle(new Point(60, 100), new Size(20, 20));
       g.DrawRectangle(new Pen(Color.Blue), rect);
       // رسم عامودا النافذة
       g.DrawLine(new Pen(Color.Green), new Point(60, 110), new Point(80, 110));
       g.DrawLine(new Pen(Color.Red), new Point(70, 100), new Point(70, 120));
   }

   // وضع الرسمة في أداة مربع صورة
   this.pictureBox1.Image = bmp;
}
الرد }}}}
#3
(11-11-16, 06:42 PM)ممدوح كتب : الرسم في بيئة سي شارب (في بيئة الدوت نت عموماً) موضوع كبير جداً
وما سأذكره هنا سوى جزء بسيط جداُ يصلح عادة للمبتدئين

--------------------------------------
يحتاج الرسم في الدوت نت بشكل أساسي لأمرين:
الأول Bitmap وهي مساحة في الذاكرة تعادل المساحة المطلوبة للرسم فيها وتحدد بالعرض Width والارتفاع Height
الثاني Graphics وهي لوحة الرسم وهي تحتوي على أدوات الرسم من ألوان وأقلام وفرش وأوامر رسم وتعبئة وإلخ
كود :
Bitmap bmp = new Bitmap(500, 500);
Graphics g = Graphics.FromImage(bmp);

--------------------------------------
الأقلام والفراشي والألوان

القلم Pen وفيه خصائص كثيرة منها تحديد اللون Color وتحديد سماكة خط الرسم Width ونوع رأس الخط ونوع نهاية الخط (مثل السهم)
وهذا أبسط مثال
كود :
Color.Red

اللون Color وهو معروف
وهذا أبسط مثال
كود :
Color.Red


الفرشاة SolidBrush وتستخدم غالبا لملئ شكل وتحتاج لتحديد اللون  مثل (ولها خصائص كثيرة متقدمة منها تعدد الألوان)
وهذا أبسط مثال
كود :
SolidBrush brush = new SolidBrush(Color.Red);

-------------------------------------------
النقطة والحجم

تحتاج لتحديد إحداثيات نقطة ما Point من أجل الرسم وتتطلب قيمتين x,y مثل
وهذا أبسط مثال
كود :
Point pnt = new Point(200, 100)

ويجب معرفة الحجم Size والذي يتطلب العرض Width والارتفاع Height
وهذا أبسط مثال
كود :
Size sz = new Size(500, 500);

المستطيل Rectangle ويتطلب تحديد الموقع بالنقطة Point والمساحة بالحجم Size
وهذا أبسط مثال
كود :
Rectangle rect = new Rectangle( new Point(0,0), new Size(200,200));

-------------------------------------
أوامر الرسم

من أوامر الرسم ما يشترط القلم Pen والتي تكون عادة لرسم الأشكال الخطية المفرغة
ومنها ما يشترط SolidBursh وعادة ذلك لتعبئة الأشكال المغلقة

أمر الرسم للأشكال المفرغة يبدأ بكلمة Draw وأمر الرسم للأشكال الممتلئة يبدأ بكلمة Fill

-------------------------------------------
أمر رسم الأشكال المفرغة يبدأ بكلمة Draw

رسم الخط DrawLine  وتحتاج لقلم Pen ونقطتين Point
وهذا أبسط مثال
كود :
g.DrawLine(new Pen(Color.Green), new Point(0, 100), new Point(200, 100));

رسم الخطوط DrawLines تعتمد على مجموعة إحداثيان Point
وهذا أبسط مثال
كود :
Point[] pnts = { new Point(0, 100), new Point(100, 0), new Point(200, 100), new Point(0, 100) };
g.DrawLines(new Pen(Color.Green), pnts);

رسم المضلع DrawPolygon وهي تشبه الخطوط Lines ولكنه شكل مغلق أي أنه سيقوم من تلقائياً بوصل آخر نقطة بأول نقطة
وهذا أبسط مثال
كود :
Point[] pnts = { new Point(0, 100), new Point(100, 0), new Point(200, 100) };
g.DrawPolygon(new Pen(Color.Blue), pnts);


رسم المستطيل DrawRectangle ويطلب تحديد المستطيل Rectangle المشروح سابقاً
وهذا أبسط مثال
كود :
Rectangle rect = new Rectangle( new Point(10,10), new Size(100,100));
g.DrawRectangle(new Pen(Color.Green), rect);

رسم الشكل البيضاوي DrawEllipse يطلب مثل المستطيل Rectangle لتحديد المساحة المراد الرسم فيها
وكما تم شرحه سابقا بإن Rectangle يطلب الحجم Size فلو وضعنا العرض Widh واللارتفاع Height بقيم متساوية سيكون الشكل دائرة تماماً
وهذا أبسط مثال
كود :
Rectangle rect = new Rectangle( new Point(10,10), new Size(100,100));
g.DrawEllipse(new Pen(Color.Red), rect);

-------------------------------------------
أمر رسم الأشكال الممتلئة يبدأ بكلمة Fill

وهي تشبه السابق بخلاف أنها تحتاج للفرشاة SolidBrush

-------------------------------------------

ولا يسع الوقت لشرح الباقي

----------------------------------------------



كود :
private void button1_Click(object sender, EventArgs e)
{
   Bitmap bmp = new Bitmap(500, 500);
   Graphics g = Graphics.FromImage(bmp);

   {   // رسم المثلث
       Point[] pnts = { new Point(0, 50), new Point(50, 0), new Point(100, 50), new Point(0, 50) };
       g.DrawLines(new Pen(Color.Green), pnts);
   }

   {   // رسم الدائرة
       Rectangle rect = new Rectangle(new Point(40, 20), new Size(20, 20));
       g.DrawEllipse(new Pen(Color.Red), rect);
   }

   {   // رسم مربع المنزل
       Rectangle rect = new Rectangle(new Point(0, 50), new Size(100, 100));
       g.DrawRectangle(new Pen(Color.Blue), rect);
   }

   {   // رسم الباب
       Rectangle rect = new Rectangle(new Point(30, 100), new Size(20, 50));
       g.DrawRectangle(new Pen(Color.Green), rect);
   }

   {   // رسم النافذة
       Rectangle rect = new Rectangle(new Point(60, 100), new Size(20, 20));
       g.DrawRectangle(new Pen(Color.Blue), rect);
       // رسم عامودا النافذة
       g.DrawLine(new Pen(Color.Green), new Point(60, 110), new Point(80, 110));
       g.DrawLine(new Pen(Color.Red), new Point(70, 100), new Point(70, 120));
   }

   // وضع الرسمة في أداة مربع صورة
   this.pictureBox1.Image = bmp;
}

بارك الله فيك أستاذي ممدوح
وزادك الله من علمه
أساتذتي الكرام
Heart أبوعمر/ سعود/ممدوح الخطيب Heart
شكرا لكم
الرد }}}}
تم الشكر بواسطة: ممدوح


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم