(مركب) الالتباس الهندسي في C#
سؤال
أحاول إنشاء شكل مركب معقد واحد على inkcanvas ، لكن يجب أن أفعل شيئًا خاطئًا ، لأن ما كنت أتوقعه ، ليس كذلك. لقد جربت العديد من التجسيدات المختلفة لإنجاز هذا.
لذلك لدي هذه الطريقة.
private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
Stroke stroke = e.Stroke;
// Close the "shape".
StylusPoint firstPoint = stroke.StylusPoints[0];
stroke.StylusPoints.Add(new StylusPoint() { X = firstPoint.X, Y = firstPoint.Y });
// Hide the drawn shape on the InkCanvas.
stroke.DrawingAttributes.Height = DrawingAttributes.MinHeight;
stroke.DrawingAttributes.Width = DrawingAttributes.MinWidth;
// Add to GeometryGroup. According to http://msdn.microsoft.com/en-us/library/system.windows.media.combinedgeometry.aspx
// a GeometryGroup should work better at Unions.
_revealShapes.Children.Add(stroke.GetGeometry());
Path p = new Path();
p.Stroke = Brushes.Green;
p.StrokeThickness = 1;
p.Fill = Brushes.Yellow;
p.Data = _revealShapes.GetOutlinedPathGeometry();
selectionInkCanvas.Children.Clear();
selectionInkCanvas.Children.Add(p);
}
لكن هذا ما أحصل عليه:http://img72.imageshack.us/img72/1286/actual.png
فأين سأخطئ؟
تيا ، أد
المحلول
المشكلة هي أن الهندسة التي يتم إرجاعها بواسطة السكتة الدماغية. القياس () هو طريق حول السكتة الدماغية ، وبالتالي فإن المنطقة التي تملأها باللون الأصفر هي مجرد منتصف السكتة الدماغية. يمكنك رؤية هذا بشكل أكثر وضوحًا إذا جعلت الخطوط أكثر سمكًا:
_revealShapes.Children.Add(stroke.GetGeometry(new DrawingAttributes() { Width = 10, Height = 10 }));
يمكنك أن تفعل ما تريد إذا قمت بتحويل قائمة نقاط القلم إلى قياس التدفق بنفسك:
var geometry = new StreamGeometry();
using (var geometryContext = geometry.Open())
{
var lastPoint = stroke.StylusPoints.Last();
geometryContext.BeginFigure(new Point(lastPoint.X, lastPoint.Y), true, true);
foreach (var point in stroke.StylusPoints)
{
geometryContext.LineTo(new Point(point.X, point.Y), true, true);
}
}
geometry.Freeze();
_revealShapes.Children.Add(geometry);
لا تنتمي إلى StackOverflow