-
رسم کمان در wpf سی شارپ
با سلام من ميخواستم در
wpf
يک کمان رسم دوتا کد دارم اولي را
add
نمي کنه وايراد ميگيره وميگه اين جزو المنت هاي کانواس نيست ونمي تونه اضافه کنه
دوي هم يک کمان بسته رسم مي کنه
و من مي خواهم يک کمان باز رسم کنم متشکرم
کد:
اولي
Pen pen=new Pen();
Point start=new Point();
Point end=new Point();
Size radius=new Size();
start.X=50;
start.Y=50;
end.X=100;
end.Y=50;
radius.Height=end.Y-start.Y;
radius.Width=end.X-start.X;
// pen.Brush=brush;
Color c = new Color();
c.A = 255;
c.B = 0;
c.G = 0;
c.R = 0;
SolidColorBrush s = new SolidColorBrush(c);
// setup the geometry object
PathGeometry geometry = new PathGeometry();
PathFigure figure = new PathFigure();
geometry.Figures.Add(figure);
figure.StartPoint = start;// start;
// add the arc to the geometry
figure.Segments.Add(new ArcSegment(end, radius,
0, false, SweepDirection.Clockwise, true));
draw the arc
drawingContext.DrawGeometry(s, pen, geometry);
cannemodar.Children.Add(figure);
کد:
دومي
var x = new System.Windows.Shapes.Path();
x.Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(100, 0, 0, 0));
x.Data =
new System.Windows.Media.CombinedGeometry(System.Windows.Media.GeometryCombineMode.Exclude,
new System.Windows.Media.EllipseGeometry(new System.Windows.Rect(5, 5, 100, 100)),
new System.Windows.Media.RectangleGeometry(new System.Windows.Rect(5, 50, 100, 100))
);
x.AllowDrop = true;
cannemodar.Children.Add(x);
-
دوستان لطفا کمکم کنید اگر کد دیگری هم دارید که در wpf کمان باز رسم می کنه متشکر می شوم
-
سلام
خوش امدید. گمانم دوماه از پست قبلیتان گذشته، شما همچنان مشکل کمان دارید ...
یک UserControl به پروزه تان اضافه کنید و کد زیر را در آن بنویسید:
(در نهایت UserControl را روی فرم قرار دهید! گمانم مشکلتان حل شود.)
کد:
protected override void OnRender(DrawingContext drawingContext)
{
this.DrawArc(
drawingContext,
null,
new System.Windows.Media.Pen(System.Windows.Media.Brushes.Blue, 1),
new System.Windows.Point(0, this.RenderSize.Height / 2),
new System.Windows.Point(this.RenderSize.Width / 2, 0),
new System.Windows.Size(this.RenderSize.Width / 2, this.RenderSize.Height / 2));
}
private void DrawArc(
System.Windows.Media.DrawingContext drawingContext,
System.Windows.Media.Brush brush,
System.Windows.Media.Pen pen,
System.Windows.Point start,
System.Windows.Point end,
System.Windows.Size radius)
{
var geometry = new System.Windows.Media.PathGeometry();
var figure = new System.Windows.Media.PathFigure();
geometry.Figures.Add(figure);
figure.StartPoint = start;
figure.Segments.Add(new System.Windows.Media.ArcSegment(end, radius, 0, false, System.Windows.Media.SweepDirection.Clockwise, true));
drawingContext.DrawGeometry(brush, pen, geometry);
}
در کد فوق قلم و شعاع و نقطه شروع و پایان قابل تنظیم است.
-
دوست عزیز متشکرم حیفم اومد به این پاسخ کامل و قشنگتون فقط یک دکمه تشکر بزنم
-
دوست عزیز من با کد شما کمان را رسم کردم الان می خواهم وقتی از قسمتی از کانواس ماوس را درگ کردی تا نقطه پایانی کمان را رسم کنه مثل اینکه یک دایره را داخل مستطیل درwpf که قطر ان نقاط شروع و انتهای درگ است بکشه (خلاصه مثل برنامه paint) ولی قوص کمان یا خیلی کوچک می شود ویا خیلی بزرگ و از محدوده این نقاط خارج می شود به نظر شما من چیکار کنم متشکرم
-
سلام
رسم دایره/بیضی پارامتر کمتری دارد، درگ یک مستطیل ابعاد دو قطر اصلی را مشخص میکند و پارامترهای رسم دایره/بیضی تامین میشود.
ولی رسم کمان پارامترهای بیشتری دارد.
اگر فرض کنیم کمان جزئی از یک دایره/بیضی باشد بجز آن مستطیل محاط حداقل زاویه شروع و پایان را هم نیاز دارد.
یا حداقل حداقل برای رسم یک کمان به سه نقطه در محور مختصات نیاز است.
در خصوص فرمول لازم الآن چیزی به ذهنم نمیرسد ولی سیستم رسم شما باید هرطور که صلاح میدانید حداقل سه نقطه را از کاربر بگیرید ...
( احتمالاً سرنخ فرمول ریاضی چنین است که این سه نقطه را باید روی سه ضلع یک مستطیل در نظر بگیرید، مستطیلی که میتواند دوران هم پیدا کرده باشد ... بعد دو ظلع مستطیل، زاویه دوران مستطیل و زاویه شروع و پایان کمان را محاسبه کنید ... )
=====
اگر تلاش میکنید برنامه دو بعدی ترسیمی بسازید، پیشنهاد میکنم از توابع گرافیکی +GDI استفاده کنید.
بحرحال +GDI مخصوص ترسیمات دوبعدی طراحی شده و کتابخانه غنی تری برای ترسیمات دوبعدی دارد.
همانطور که DirectX در فضای سه بعدی حرف اول را میزند.
برای استفاده از کلاسها و توابع +GDI کافی است از فضای System.Drawing خود Framework استفاده کنید.