-1
에서 PointerMoveEvent
에 두 줄을 그려야하지만 결과는 InkCanvas
만큼 좋지 않습니다. uwp에서 같은 시간에 두 개의 획을 그리는 방법?
InkCanvas
이 도달 할 수 있나요?
private void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
// Get information about the pointer location.
PointerPoint pt = e.GetCurrentPoint(inkCanvas);
m_PreviousContactPoint = pt.Position;
m_Point2 = new Point(0, 0);
m_Point1 = pt.Position;
// Accept input only from a pen or mouse with the left button pressed.
PointerDeviceType pointerDevType = e.Pointer.PointerDeviceType;
if (pointerDevType == PointerDeviceType.Pen ||
pointerDevType == PointerDeviceType.Mouse && pt.Properties.IsLeftButtonPressed)
{
e.Handled = true;
IsPressed = true;
}
else if (pointerDevType == PointerDeviceType.Touch)
{
// Process touch input
}
}
private void Canvas_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (IsPressed)
{
PointerPoint pt = e.GetCurrentPoint(inkCanvas);
var currentContactPt = pt.Position;
var x1 = m_PreviousContactPoint.X;
var y1 = m_PreviousContactPoint.Y;
var x2 = currentContactPt.X;
var y2 = currentContactPt.Y;
var color = Windows.UI.Colors.Black;
//var size = 4;
if (CalculateDistance(x1, y1, x2, y2) > 2.0)
{
if (m_Point2.X == 0 && m_Point2.Y == 0)
{
m_Point2 = currentContactPt;
return;
}
drawBezier(m_Point1, m_Point2, currentContactPt);
drawBezier(new Point(m_Point1.X + 100, m_Point1.Y), new Point(m_Point2.X + 100, m_Point2.Y), new Point(currentContactPt.X + 100, currentContactPt.Y));
m_PreviousContactPoint = currentContactPt;
m_Point1 = currentContactPt;
m_Point2 = new Point(0, 0);
}
}
}
private void drawBezier(Point point1, Point point2, Point point3)
{
var pathGeometry = new PathGeometry();
BezierSegment bezier = new BezierSegment()
{
Point1 = point1,
Point2 = point2,
Point3 = point3
};
PathFigure figure = new PathFigure();
figure.StartPoint = point1;
figure.Segments.Add(bezier);
[![enter image description here][1]][1]
Windows.UI.Xaml.Shapes.Path path = new Windows.UI.Xaml.Shapes.Path();
path.Stroke = new SolidColorBrush(Colors.Black);
pathGeometry.Figures.Add(figure);
path.Data = pathGeometry;
path.StrokeEndLineCap = PenLineCap.Round;
path.StrokeStartLineCap = PenLineCap.Round;
path.StrokeThickness = 4;
inkCanvas.Children.Add(path);
}
private double CalculateDistance(double x1, double y1, double x2, double y2)
{
double d = 0;
d = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
return d;
}
private void Canvas_PointerReleased(object sender, PointerRoutedEventArgs e)
{
IsPressed = false;
}
, 당신은 뇌졸중 수집 이벤트를 수신 할 수 있습니다. 수집 된 모든 스트로크를 조작하여 컬렉션에 추가하십시오. 이 개념이 당신의 시나리오에서 작동 할 것인가/ –
@KiranPaul 어떻게 모든 스트로크를 조작 할 수 있습니까? 'args.Strokes'에서 각 InkStroke의'InkPoint'를 가져 와서 위치를 바꿀 수는 있지만'InkStroke'에는 생성자 –