PDA

View Full Version : سوال: اضافه کردن چند شکل دیگه به برنامه paint



nofilter
دوشنبه 24 خرداد 1389, 11:56 صبح
سلام
می خواستم چند شکل دیگه به برنامه paint اضافه کنیم

مثلا می خوام به این برنامه ای که در ضمیمه وجود داره شکلهای :

لوزی
ذوذنقه
خط جهت دار
اضافه کنم.

دوستان لطفا راهنمایی و کمک کنید.

آدرس فایل :
http://barnamenevis.org/forum/attachment.php?attachmentid=51069&d=1276402017

ASKaffash
سه شنبه 25 خرداد 1389, 11:07 صبح
سلام
برای ترسیم اشکال خاص باید منطق پیاده سازی آن را مد نظر قرار دهید مثلا برای ترسیم یک لوزی فقط ارائه ابتدا و انتهای یک پاره خط کافی است و سپس چهار مثلث شبیه شکل ذیل یک لوزی را برای شما ترسیم می کند :

nofilter
سه شنبه 25 خرداد 1389, 11:22 صبح
سلام
برای ترسیم اشکال خاص باید منطق پیاده سازی آن را مد نظر قرار دهید مثلا برای ترسیم یک لوزی فقط ارائه ابتدا و انتهای یک پاره خط کافی است و سپس چهار مثلث شبیه شکل ذیل یک لوزی را برای شما ترسیم می کند :
خیلی ممنون
حالا به نظر شما برای پیاده سازی این شکل در برنامه من چه کاری باید انجام داد ؟
آیا روشی هست که شکل را با کمی چرخش رسم کند؟
مثل در همین برنامه از مربع برای رسم لوزی هم استفاده کنیم و البته با کمی چرخش!

ASKaffash
سه شنبه 25 خرداد 1389, 11:27 صبح
سلام
بله در کلاس Graphics و متدهائی مثل RotateTransform می توان اشکال و فونتها و ... را دوران داد ولی سئوال این است که جطوری می خواهید دوران را از کاربر بگیرید؟
برای ترسیم لوزی به نظر من دونقطه X,Y را روی صفحه از کاربر بگیرید

nofilter
سه شنبه 25 خرداد 1389, 11:45 صبح
سلام
بله در کلاس Graphics و متدهائی مثل RotateTransform می توان اشکال و فونتها و ... را دوران داد ولی سئوال این است که جطوری می خواهید دوران را از کاربر بگیرید؟
برای ترسیم لوزی به نظر من دونقطه X,Y را روی صفحه از کاربر بگیرید
دوست عزیز شما برنامه ای که گذاشتم رو نگاه کنید!
ما دوران را از کاربر نمی گیریم،بلکه مقدار دوران ثابت خواهد بود.
می خوام این برنامه تقریبا حالت dynamic داشته باشد.

ASKaffash
سه شنبه 25 خرداد 1389, 13:17 عصر
سلام
بله برنامه را دیدم برنامه خوبی است پس شما می توانید یک مستطیل رسم کنید و با دریافت زاویه چرخش در یک فرم شکل لوزی را بدست آورید

nofilter
سه شنبه 25 خرداد 1389, 14:13 عصر
پس اگه می تونید کمک کنید تا برنامه رو کامل کنیم(مرسی)

ASKaffash
سه شنبه 25 خرداد 1389, 14:50 عصر
سلام
این یک سورس برای دوران متن و دایره و مستطیل :


private int Rotate = 45;
private void Form8_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
float W = g.MeasureString(this.Text, this.Font).Width;
float H = g.MeasureString(this.Text, this.Font).Height;
double Ang = ((double)this.Rotate / 180 * Math.PI);
g.TranslateTransform(
(this.ClientRectangle.Width + (float)(H * Math.Sin(Ang)) - (float)(W * Math.Cos(Ang))) / 2,
(this.ClientRectangle.Height - (float)(H * Math.Cos(Ang)) - (float)(W * Math.Sin(Ang))) / 2
);
g.RotateTransform(this.Rotate);
g.DrawString("Rotate " + this.Rotate.ToString(), this.Font, Brushes.Red, 0f, 0f);
g.DrawRectangle(Pens.Green, 0, 10, 50, 80);
g.DrawEllipse(Pens.Blue, 0, 10, 50, 80);
g.ResetTransform();
}

exlord
سه شنبه 25 خرداد 1389, 18:24 عصر
خط جهت دار


Pen arrowP = new Pen(Color.Blue);
arrowP.EndCap = System.Drawing.Drawing2D.LineCap.Custom;
arrowP.CustomEndCap = new System.Drawing.Drawing2D.AdjustableArrowCap(5, 5);

exlord
سه شنبه 25 خرداد 1389, 19:05 عصر
لوزی



public static class DrawShaps
{
public static void DrawLozi(this Graphics g, Pen p,Rectangle r)
{
Point [] points = new Point[5];
int X = r.X;
int Y = r.Y;
int hW = r.Width/2;
int hH = r.Height/2;
points[0] = new Point(X + hW, Y);
points[1] = new Point(X , Y + hH);
points[2] = new Point(X + hW, Y + r.Height);
points[3] = new Point(X + r.Width, Y + hH);
points[4] = new Point(X + hW, Y);

g.DrawLines(p, points);
}
}




Graphics g = this.CreateGraphics();
g.DrawLozi(new Pen(Color.Black), new Rectangle(100, 100, 150, 200));

nofilter
سه شنبه 25 خرداد 1389, 19:15 عصر
سلام
این یک سورس برای دوران متن و دایره و مستطیل :


private int Rotate = 45;
private void Form8_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
float W = g.MeasureString(this.Text, this.Font).Width;
float H = g.MeasureString(this.Text, this.Font).Height;
double Ang = ((double)this.Rotate / 180 * Math.PI);
g.TranslateTransform(
(this.ClientRectangle.Width + (float)(H * Math.Sin(Ang)) - (float)(W * Math.Cos(Ang))) / 2,
(this.ClientRectangle.Height - (float)(H * Math.Cos(Ang)) - (float)(W * Math.Sin(Ang))) / 2
);
g.RotateTransform(this.Rotate);
g.DrawString("Rotate " + this.Rotate.ToString(), this.Font, Brushes.Red, 0f, 0f);
g.DrawRectangle(Pens.Green, 0, 10, 50, 80);
g.DrawEllipse(Pens.Blue, 0, 10, 50, 80);
g.ResetTransform();
}

خیلی ممنون
ولی کاش می شد که اینو یه جوری تو برنامه من جا میدادی
من خودم هر کاری کردم خطا گرفت
البته تو یه برنامه دیگه کار می کنه ولی اینجا معلوم نیست چه مشکلی داره.

exlord
سه شنبه 25 خرداد 1389, 19:25 عصر
ذوذنقه



public static class DrawShaps
{
/// <summary>
/// Kaji = az -r.width ta r.width
/// </summary>
public static void DrawZuzanage(this Graphics g, Pen p, Rectangle r, int kajiChap, int KajiRast)
{
Point[] points = new Point[5];
int X = r.X;
int Y = r.Y;

points[0] = new Point(X + kajiChap, Y);
points[1] = new Point(X, Y + r.Height);
points[2] = new Point(X + r.Width, Y + r.Height);
points[3] = new Point(X + r.Width + KajiRast, Y);
points[4] = new Point(X + kajiChap, Y);

g.DrawLines(p, points);
}
}
Graphics g = this.CreateGraphics();
g.DrawZuzanage(new Pen(Color.Black), new Rectangle(100, 100, 150, 50),20);

nofilter
چهارشنبه 26 خرداد 1389, 10:17 صبح
دوستان خیلی ممنون،واقعا زحمت کشیدین.

لطفا یکی این کدها رو بصورت درست تو برنامه ما جا بده.
من از دیروز تا حالا هرکاری کردم نشد که نشد!
خیلی خطا میده
لطفا راهنمایی کنید.

ASKaffash
چهارشنبه 26 خرداد 1389, 11:19 صبح
سلام
بخش خطا به همراه عنوان خطا را قرار دهید

nofilter
چهارشنبه 26 خرداد 1389, 12:42 عصر
سلام
بخش خطا به همراه عنوان خطا را قرار دهید
والا خطاهایی که میده خیلی زیاده و نمتونم چطوری کپی کنم.

فقط یه موردی درباره تکه کدی که شما زحمت کشیده بودین :
این کد که فقط یه لوزی با اندازه ثابت رسم می کنه !
من اگه بخوام مثل برنامه خودم دینامیک باشه باید پکار کنم؟
لطفا راهنمایی بفرمایید.

ASKaffash
چهارشنبه 26 خرداد 1389, 12:58 عصر
سلام
مثل رسم یک مستطیل ساده باید مختصات و ابعاد را Dynamic کنید در این خط :


g.DrawRectangle(Pens.Green, 0, 10, 50, 80);

پارامترها شروع ترسیم و طول و عرض لوزی هستند

nofilter
چهارشنبه 26 خرداد 1389, 13:46 عصر
خیلی ممنون
این واقعا به درد کار من خورد
اگه میشه شما برای بقیه اشکال هم یه نظری بدین.

nofilter
جمعه 28 خرداد 1389, 10:20 صبح
واقعا هیچ کسی حاضر نیست که کمک کنه ؟!!

ASKaffash
شنبه 29 خرداد 1389, 08:09 صبح
سلام
یک ذوزنقه یک مستطیل است که از بالای آن دو مثلث قائم الزاویه برداشته شده است اگر در این مثال P نشانه درصدی از ضلع کسر شده مثلث باشد این مثال ذوزنقه را ترسیم می کند :


float P = 0.2f;
private void Form8_Paint(object sender, PaintEventArgs e)
{
Pen MyPen = Pens.Red;
Graphics g = e.Graphics;
float X = 50f, Y = 100f;
float W = 400f, H = 200f;
g.DrawLine(MyPen, X + W * P, Y, X + W * (1 - P), Y);
g.DrawLine(MyPen, X, Y + H, X + W, Y + H);
g.DrawLine(MyPen, X + W * P, Y, X, Y + H);
g.DrawLine(MyPen, X + W * (1 - P), Y, X + W, Y + H);
}

nofilter
یک شنبه 30 خرداد 1389, 20:26 عصر
از دوستان یکی نبود این کار و در قبال یه چیزی برای ما انجام بده؟

nofilter
یک شنبه 30 خرداد 1389, 21:29 عصر
حتی اگه یکی از شکل ها مثلا لوزی رو در این برنامه جا بدین من قول میدم خودم همشو کامل کنم!

exlord
دوشنبه 31 خرداد 1389, 08:35 صبح
حتی اگه یکی از شکل ها مثلا لوزی رو در این برنامه جا بدین من قول میدم خودم همشو کامل کنم!
از اونجایی که برنامه خیلی بد نوشته شده کسی حاضر نیست توش دست ببره :قهقهه:

nofilter
دوشنبه 31 خرداد 1389, 08:39 صبح
از اونجایی که برنامه خیلی بد نوشته شده کسی حاضر نیست توش دست ببره :قهقهه:
دوست عزیز خیلی ممنون

لطفا روی این پست تمرکز کنید (اگه قصد کمک دارید)

http://barnamenevis.org/forum/showthread.php?t=228957

http://barnamenevis.org/forum/showthread.php?t=228978

ASKaffash
دوشنبه 31 خرداد 1389, 08:40 صبح
سلام
تقریبا ذوزنقه را برایتان پیاده سازی کردم :

newsoft
سه شنبه 08 تیر 1389, 21:46 عصر
Pen arrowP = new Pen(Color.Blue);
arrowP.EndCap = System.Drawing.Drawing2D.LineCap.Custom;
arrowP.CustomEndCap = new System.Drawing.Drawing2D.AdjustableArrowCap(5, 5);



به شکل کامل


private void button7_Click(object sender, EventArgs e)
{
Pen arrowP = new Pen(Color.Blue);
arrowP.EndCap = System.Drawing.Drawing2D.LineCap.Custom;
arrowP.CustomEndCap = new System.Drawing.Drawing2D.AdjustableArrowCap(5, 5);
Graphics g = this.CreateGraphics();
Point p1=new Point(200,150);
Point p2=new Point(100,280);
g.DrawLine(arrowP, p1, p2);
}