Add Shape Drawing and change inked strokes' color

This commit is contained in:
XY Wang 2021-12-05 15:04:40 +08:00
parent d17f6cfa53
commit 6a5c1d87ae
25 changed files with 12244 additions and 43 deletions

View File

@ -10,6 +10,7 @@
<ui:ThemeResources RequestedTheme="Light" />
<ui:XamlControlsResources />
<ResourceDictionary Source="Resources/SeewoImageDictionary.xaml"/>
<ResourceDictionary Source="Resources/DrawShapeImageDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

View File

@ -181,6 +181,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Resources\DrawShapeImageDictionary.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Resources\SeewoImageDictionary.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>

View File

@ -777,6 +777,23 @@
</Border>
</Grid>
<ui:SymbolIcon Symbol="SelectAll" Foreground="#666666" MouseUp="SymbolIconSelect_MouseUp"/>
<Grid Margin="3,5,0,5">
<Image MouseUp="ImageDrawShape_MouseUp" Margin="-2.5" Source="{DynamicResource DrawShapeImageSource.DrawShapeIcon}"/>
<Border x:Name="BorderDrawShape" Visibility="Visible" Background="#9FFFFFFF" BorderBrush="#BF666666" BorderThickness="1"
CornerRadius="8" Margin="-158,-65,-158,30" Height="50">
<ui:SimpleStackPanel Spacing="10" Orientation="{Binding ElementName=StackPanelFloatingBar, Path=Orientation}">
<Image Margin="10,12,0,12" MouseUp="BtnDrawLine_Click" Source="{DynamicResource DrawShapeImageSource.Line}"/>
<Image Margin="-4,12,0,12" MouseUp="BtnDrawDashedLine_Click" Source="{DynamicResource DrawShapeImageSource.DashedLine}"/>
<Image Margin="-4,12,3,12" MouseUp="BtnDrawArrow_Click" Source="{DynamicResource DrawShapeImageSource.ArrowLine}"/>
<Image Margin="0,11" MouseUp="BtnDrawRectangle_Click" Source="{DynamicResource DrawShapeImageSource.Rectangle}"/>
<Image Margin="0,10" MouseUp="BtnDrawEllipse_Click" Source="{DynamicResource DrawShapeImageSource.Ellipse}"/>
<Image Margin="0,10" MouseUp="BtnDrawCircle_Click" Source="{DynamicResource DrawShapeImageSource.Circle}"/>
<Image Margin="3,10,2,10" MouseUp="BtnDrawCylinder_Click" Source="{DynamicResource DrawShapeImageSource.Cylinder}"/>
<Image Margin="2,12.5,2.5,10" MouseUp="BtnDrawCone_Click" Source="{DynamicResource DrawShapeImageSource.Cone}"/>
<Image Margin="2,12.5,2.5,10" MouseUp="BtnDrawCuboid_Click" Source="{DynamicResource DrawShapeImageSource.Cuboid}"/>
</ui:SimpleStackPanel>
</Border>
</Grid>
<Viewbox Margin="0,2">
<Grid>
<ui:SymbolIcon Symbol="Undo" Foreground="#666666"

View File

@ -51,6 +51,7 @@ namespace Ink_Canvas
InitializeComponent();
BorderSettings.Visibility = Visibility.Collapsed;
StackPanelToolButtons.Visibility = Visibility.Collapsed;
BorderDrawShape.Visibility = Visibility.Collapsed;
if (App.StartArgs.Contains("-b")) //-b border
{
@ -1069,11 +1070,27 @@ namespace Ink_Canvas
}
BtnHideInkCanvas_Click(BtnHideInkCanvas, null);
}
StrokeCollection strokes = inkCanvas.GetSelectedStrokes();
if (strokes.Count != 0)
{
foreach (Stroke stroke in strokes)
{
try
{
stroke.DrawingAttributes.Color = inkCanvas.DefaultDrawingAttributes.Color;
}
catch { }
}
}
else
{
inkCanvas.IsManipulationEnabled = true;
drawingShapeMode = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
CancelSingleFingerDragMode();
forceEraser = false;
}
// 改变选中提示
ViewboxBtnColorBlackContent.Visibility = Visibility.Collapsed;
@ -1362,6 +1379,10 @@ namespace Ink_Canvas
BorderClearInDelete.Visibility = Visibility.Collapsed;
iniP = e.GetTouchPoint(inkCanvas).Position;
if (drawingShapeMode == 9 && isFirstTouchCuboid == false)
{
MouseTouchMove(iniP);
}
inkCanvas.Opacity = 1;
double boundsWidth = GetTouchBoundWidth(e);
@ -2422,6 +2443,23 @@ namespace Ink_Canvas
#region Shape Drawing
#region Floating Bar Control
private void ImageDrawShape_MouseUp(object sender, MouseButtonEventArgs e)
{
if (BorderDrawShape.Visibility == Visibility.Visible)
{
BorderDrawShape.Visibility = Visibility.Collapsed;
}
else
{
BorderDrawShape.Visibility = Visibility.Visible;
}
}
#endregion Floating Bar Control
int drawingShapeMode = 0;
private void BtnPen_Click(object sender, RoutedEventArgs e)
@ -2433,7 +2471,7 @@ namespace Ink_Canvas
CancelSingleFingerDragMode();
}
private void BtnDrawLine_Click(object sender, RoutedEventArgs e)
private void BtnDrawLine_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 1;
@ -2442,7 +2480,16 @@ namespace Ink_Canvas
CancelSingleFingerDragMode();
}
private void BtnDrawArrow_Click(object sender, RoutedEventArgs e)
private void BtnDrawDashedLine_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 8;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
}
private void BtnDrawArrow_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 2;
@ -2451,7 +2498,7 @@ namespace Ink_Canvas
CancelSingleFingerDragMode();
}
private void BtnDrawRectangle_Click(object sender, RoutedEventArgs e)
private void BtnDrawRectangle_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 3;
@ -2460,7 +2507,7 @@ namespace Ink_Canvas
CancelSingleFingerDragMode();
}
private void BtnDrawEllipse_Click(object sender, RoutedEventArgs e)
private void BtnDrawEllipse_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 4;
@ -2469,6 +2516,45 @@ namespace Ink_Canvas
CancelSingleFingerDragMode();
}
private void BtnDrawCircle_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 5;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
}
private void BtnDrawCylinder_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 6;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
}
private void BtnDrawCone_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 7;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
}
private void BtnDrawCuboid_Click(object sender, EventArgs e)
{
forceEraser = true;
drawingShapeMode = 9;
isFirstTouchCuboid = true;
CuboidFrontRectIniP = new Point();
CuboidFrontRectEndP = new Point();
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
}
private void inkCanvas_TouchMove(object sender, TouchEventArgs e)
{
if (isSingleFingerDragMode) return;
@ -2476,27 +2562,6 @@ namespace Ink_Canvas
{
if (isLastTouchEraser)
{
//if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke)
//{
// inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
//}
//MessageBox.Show(inkCanvas.EditingMode.ToString());
//if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke)
//{
//}
//double boundsWidth = e.GetTouchPoint(null).Bounds.Width;
//if (boundsWidth > BoundsWidth * 1.7)
//{
// inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * 1.5, boundsWidth * 1.5);
// inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
//}
//else
//{
// inkCanvas.EraserShape = new RectangleStylusShape(8, 8);
// //inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * 1.5, boundsWidth * 1.5);
// inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
//}
return;
}
if (isWaitUntilNextTouchDown) return;
@ -2506,6 +2571,7 @@ namespace Ink_Canvas
try
{
inkCanvas.Strokes.Remove(lastTempStroke);
inkCanvas.Strokes.Remove(lastTempStrokeCollection);
}
catch { }
return;
@ -2520,10 +2586,11 @@ namespace Ink_Canvas
private void MouseTouchMove(Point endP)
{
//System.Windows.Point endP = e.GetTouchPoint(inkCanvas).Position;
List<System.Windows.Point> pointList;
StylusPointCollection point;
Stroke stroke;
StrokeCollection strokes = new StrokeCollection();
Point newIniP = iniP;
switch (drawingShapeMode)
{
case 1:
@ -2544,6 +2611,16 @@ namespace Ink_Canvas
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
break;
case 8:
strokes.Add(GenerateDashedLineStrokeCollection(iniP, endP));
try
{
inkCanvas.Strokes.Remove(lastTempStrokeCollection);
}
catch { }
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
break;
case 2:
double w = 30, h = 10;
double theta = Math.Atan2(iniP.Y - endP.Y, iniP.X - endP.X);
@ -2593,7 +2670,7 @@ namespace Ink_Canvas
inkCanvas.Strokes.Add(stroke);
break;
case 4:
pointList = GenerateEclipseGeometry(iniP, endP);
pointList = GenerateEllipseGeometry(iniP, endP);
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
@ -2607,30 +2684,335 @@ namespace Ink_Canvas
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
break;
case 5:
double R = GetDistance(iniP, endP);
pointList = GenerateEllipseGeometry(new Point(iniP.X - R, iniP.Y - R), new Point(iniP.X + R, iniP.Y + R));
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
try
{
inkCanvas.Strokes.Remove(lastTempStroke);
}
catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
break;
case 6:
newIniP = iniP;
if (iniP.Y > endP.Y)
{
newIniP = new Point(iniP.X, endP.Y);
endP = new Point(endP.X, iniP.Y);
}
double topA = Math.Abs(newIniP.X - endP.X);
double topB = topA / 2.646;
//顶部椭圆
pointList = GenerateEllipseGeometry(new Point(newIniP.X, newIniP.Y - topB / 2), new Point(endP.X, newIniP.Y + topB / 2));
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
//底部椭圆
pointList = GenerateEllipseGeometry(new Point(newIniP.X, endP.Y - topB / 2), new Point(endP.X, endP.Y + topB / 2), false, true);
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
strokes.Add(GenerateDashedLineEllipseStrokeCollection(new Point(newIniP.X, endP.Y - topB / 2), new Point(endP.X, endP.Y + topB / 2), true, false));
//左侧
pointList = new List<System.Windows.Point>{
new System.Windows.Point(newIniP.X, newIniP.Y),
new System.Windows.Point(newIniP.X, endP.Y)
};
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
//右侧
pointList = new List<System.Windows.Point>{
new System.Windows.Point(endP.X, newIniP.Y),
new System.Windows.Point(endP.X, endP.Y)
};
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
try
{
inkCanvas.Strokes.Remove(lastTempStrokeCollection);
}
catch { }
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
break;
case 7:
if (iniP.Y > endP.Y)
{
newIniP = new Point(iniP.X, endP.Y);
endP = new Point(endP.X, iniP.Y);
}
double bottomA = Math.Abs(newIniP.X - endP.X);
double bottomB = bottomA / 2.646;
//底部椭圆
pointList = GenerateEllipseGeometry(new Point(newIniP.X, endP.Y - bottomB / 2), new Point(endP.X, endP.Y + bottomB / 2), false, true);
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
strokes.Add(GenerateDashedLineEllipseStrokeCollection(new Point(newIniP.X, endP.Y - bottomB / 2), new Point(endP.X, endP.Y + bottomB / 2), true, false));
//左侧
pointList = new List<System.Windows.Point>{
new System.Windows.Point((newIniP.X + endP.X) / 2, newIniP.Y),
new System.Windows.Point(newIniP.X, endP.Y)
};
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
//右侧
pointList = new List<System.Windows.Point>{
new System.Windows.Point((newIniP.X + endP.X) / 2, newIniP.Y),
new System.Windows.Point(endP.X, endP.Y)
};
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
try
{
inkCanvas.Strokes.Remove(lastTempStrokeCollection);
}
catch { }
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
break;
case 9:
if (isFirstTouchCuboid)
{
pointList = new List<System.Windows.Point>{
new System.Windows.Point(iniP.X, iniP.Y),
new System.Windows.Point(iniP.X, endP.Y),
new System.Windows.Point(endP.X, endP.Y),
new System.Windows.Point(endP.X, iniP.Y),
new System.Windows.Point(iniP.X, iniP.Y)
};
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
try
{
inkCanvas.Strokes.Remove(lastTempStroke);
}
catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
CuboidFrontRectIniP = iniP;
CuboidFrontRectEndP = endP;
}
else
{
double d = CuboidFrontRectIniP.Y - endP.Y;
double a = CuboidFrontRectEndP.X - CuboidFrontRectIniP.X; //正面矩形长
double b = CuboidFrontRectEndP.Y - CuboidFrontRectIniP.Y; //正面矩形宽
//横上
Point newLineIniP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectIniP.Y - d);
Point newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d);
pointList = new List<System.Windows.Point> { newLineIniP, newLineEndP };
point = new StylusPointCollection(pointList);
stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() };
strokes.Add(stroke.Clone());
//横下 (虚线)
newLineIniP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectEndP.Y - d);
newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectEndP.Y - d);
strokes.Add(GenerateDashedLineStrokeCollection(newLineIniP, newLineEndP));
//斜左上
newLineIniP = new Point(CuboidFrontRectIniP.X, CuboidFrontRectIniP.Y);
newLineEndP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectIniP.Y - d);
pointList = new List<System.Windows.Point> { newLineIniP, newLineEndP };
point = new StylusPointCollection(pointList);
stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() };
strokes.Add(stroke.Clone());
//斜右上
newLineIniP = new Point(CuboidFrontRectEndP.X, CuboidFrontRectIniP.Y);
newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d);
pointList = new List<System.Windows.Point> { newLineIniP, newLineEndP };
point = new StylusPointCollection(pointList);
stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() };
strokes.Add(stroke.Clone());
//斜左下 (虚线)
newLineIniP = new Point(CuboidFrontRectIniP.X, CuboidFrontRectEndP.Y);
newLineEndP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectEndP.Y - d);
strokes.Add(GenerateDashedLineStrokeCollection(newLineIniP, newLineEndP));
//斜右下
newLineIniP = new Point(CuboidFrontRectEndP.X, CuboidFrontRectEndP.Y);
newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectEndP.Y - d);
pointList = new List<System.Windows.Point> { newLineIniP, newLineEndP };
point = new StylusPointCollection(pointList);
stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() };
strokes.Add(stroke.Clone());
//竖左 (虚线)
newLineIniP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectIniP.Y - d);
newLineEndP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectEndP.Y - d);
strokes.Add(GenerateDashedLineStrokeCollection(newLineIniP, newLineEndP));
//竖右
newLineIniP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d);
newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectEndP.Y - d);
pointList = new List<System.Windows.Point> { newLineIniP, newLineEndP };
point = new StylusPointCollection(pointList);
stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() };
strokes.Add(stroke.Clone());
try
{
inkCanvas.Strokes.Remove(lastTempStrokeCollection);
}
catch { }
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
}
break;
}
}
bool isFirstTouchCuboid = true;
Point CuboidFrontRectIniP = new Point();
Point CuboidFrontRectEndP = new Point();
private void Main_Grid_TouchUp(object sender, TouchEventArgs e)
{
lastTempStroke = null;
inkCanvas_MouseUp(sender, null);
if (dec.Count == 0)
{
isWaitUntilNextTouchDown = false;
}
}
Stroke lastTempStroke = null; bool isWaitUntilNextTouchDown = false;
private List<System.Windows.Point> GenerateEclipseGeometry(System.Windows.Point st, System.Windows.Point ed)
Stroke lastTempStroke = null;
StrokeCollection lastTempStrokeCollection = new StrokeCollection();
bool isWaitUntilNextTouchDown = false;
private List<System.Windows.Point> GenerateEllipseGeometry(System.Windows.Point st, System.Windows.Point ed, bool isDrawTop = true, bool isDrawBottom = true)
{
double a = 0.5 * (ed.X - st.X);
double b = 0.5 * (ed.Y - st.Y);
List<System.Windows.Point> pointList = new List<System.Windows.Point>();
if (isDrawTop && isDrawBottom)
{
for (double r = 0; r <= 2 * Math.PI; r = r + 0.01)
{
pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r)));
}
}
else
{
if (isDrawBottom)
{
for (double r = 0; r <= Math.PI; r = r + 0.01)
{
pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r)));
}
}
if (isDrawTop)
{
for (double r = Math.PI; r <= 2 * Math.PI; r = r + 0.01)
{
pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r)));
}
}
}
return pointList;
}
private StrokeCollection GenerateDashedLineEllipseStrokeCollection(System.Windows.Point st, System.Windows.Point ed, bool isDrawTop = true, bool isDrawBottom = true)
{
double a = 0.5 * (ed.X - st.X);
double b = 0.5 * (ed.Y - st.Y);
double step = 0.05;
List<System.Windows.Point> pointList = new List<System.Windows.Point>();
StylusPointCollection point;
Stroke stroke;
StrokeCollection strokes = new StrokeCollection();
if (isDrawBottom)
{
for (double i = 0.0; i < 1.0; i += step * 1.66)
{
pointList = new List<Point>();
for (double r = Math.PI * i; r <= Math.PI * (i + step); r = r + 0.01)
{
pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r)));
}
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
}
}
if (isDrawTop)
{
for (double i = 1.0; i < 2.0; i += step * 1.66)
{
pointList = new List<Point>();
for (double r = Math.PI * i; r <= Math.PI * (i + step); r = r + 0.01)
{
pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r)));
}
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
}
}
return strokes;
}
private StrokeCollection GenerateDashedLineStrokeCollection(System.Windows.Point st, System.Windows.Point ed)
{
double step = 5;
List<System.Windows.Point> pointList = new List<System.Windows.Point>();
StylusPointCollection point;
Stroke stroke;
StrokeCollection strokes = new StrokeCollection();
double d = GetDistance(st, ed);
double sinTheta = (ed.Y - st.Y) / d;
double cosTheta = (ed.X - st.X) / d;
for (double i = 0.0; i < d; i += step * 2.76)
{
pointList = new List<System.Windows.Point>{
new System.Windows.Point(st.X + i * cosTheta, st.Y + i * sinTheta),
new System.Windows.Point(st.X + Math.Min(i + step, d) * cosTheta, st.Y + Math.Min(i + step, d) * sinTheta)
};
point = new StylusPointCollection(pointList);
stroke = new Stroke(point)
{
DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone()
};
strokes.Add(stroke.Clone());
}
return strokes;
}
bool isMouseDown = false;
private void inkCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
@ -2649,6 +3031,27 @@ namespace Ink_Canvas
private void inkCanvas_MouseUp(object sender, MouseButtonEventArgs e)
{
lastTempStroke = null;
lastTempStrokeCollection = null;
if (drawingShapeMode != 9 && drawingShapeMode != 0)
{
BtnPen_Click(null, null); //画完一次还原到笔模式
}
if (drawingShapeMode == 9)
{
if (isFirstTouchCuboid)
{
isFirstTouchCuboid = false;
Point newIniP = new Point(Math.Min(CuboidFrontRectIniP.X, CuboidFrontRectEndP.X), Math.Min(CuboidFrontRectIniP.Y, CuboidFrontRectEndP.Y));
Point newEndP = new Point(Math.Max(CuboidFrontRectIniP.X, CuboidFrontRectEndP.X), Math.Max(CuboidFrontRectIniP.Y, CuboidFrontRectEndP.Y));
CuboidFrontRectIniP = newIniP;
CuboidFrontRectEndP = newEndP;
}
else
{
BtnPen_Click(null, null); //画完还原到笔模式
}
}
BorderDrawShape.Visibility = Visibility.Collapsed;
isMouseDown = false;
}
@ -3148,7 +3551,7 @@ namespace Ink_Canvas
Point iniP = new Point(result.Centroid.X - shape.Width / 2, result.Centroid.Y - shape.Height / 2);
Point endP = new Point(result.Centroid.X + shape.Width / 2, result.Centroid.Y + shape.Height / 2);
var pointList = GenerateEclipseGeometry(iniP, endP);
var pointList = GenerateEllipseGeometry(iniP, endP);
var point = new StylusPointCollection(pointList);
var stroke = new Stroke(point)
{
@ -3217,10 +3620,13 @@ namespace Ink_Canvas
}
else if (Math.Abs(result.Centroid.X - circle.Centroid.X) / a < 0.2)
{
Label.Visibility = Visibility.Visible;
Label.Foreground = Brushes.Gray;
double sinTheta = Math.Abs(circle.Centroid.Y - result.Centroid.Y) / circle.R;
double cosTheta = Math.Sqrt(1 - sinTheta * sinTheta);
double newA = circle.R * cosTheta;
if (Math.Abs(newA - circle.R) / a < 0.35 && a / b > 3)
Label.Content = Label.Content.ToString() + newA.ToString() + " " + (Math.Abs(newA - circle.R) / a).ToString();
if (circle.R * sinTheta / circle.R < 0.9 && a / b > 2 && Math.Abs(newA - a) / newA < 0.3)
{
iniP.X = circle.Centroid.X - newA;
endP.X = circle.Centroid.X + newA;
@ -3233,7 +3639,7 @@ namespace Ink_Canvas
double cosTheta = Math.Abs(circle.Centroid.X - result.Centroid.X) / circle.R;
double sinTheta = Math.Sqrt(1 - cosTheta * cosTheta);
double newA = circle.R * sinTheta;
if (Math.Abs(newA - circle.R) / a < 0.35 && a / b > 3)
if (circle.R * sinTheta / circle.R < 0.9 && a / b > 2 && Math.Abs(newA - a) / newA < 0.3)
{
iniP.X = result.Centroid.X - newA / 5;
endP.X = result.Centroid.X + newA / 5;
@ -3252,7 +3658,7 @@ namespace Ink_Canvas
p[1] = newPoints[0];
p[3] = newPoints[1];
var pointList = GenerateEclipseGeometry(iniP, endP);
var pointList = GenerateEllipseGeometry(iniP, endP);
var point = new StylusPointCollection(pointList);
var stroke = new Stroke(point)
{

View File

@ -0,0 +1,448 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DrawingImage x:Key="DrawShapeImageSource.Circle">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V825 H825 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<EllipseGeometry RadiusX="387.5" RadiusY="387.5" Center="412.5,412.5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="150" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="412.45,412.55" EndPoint="412.55,412.45" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.Cuboid">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V798.2 H801.77 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25.23,224.28" EndPoint="572.99,224.67" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25.23,772.23" EndPoint="25.23,224.47" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="575.5,772.79" EndPoint="575.5,225.03" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="26.01,772.23" EndPoint="573.77,772.62" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,225" EndPoint="225,25" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="575.75,225.25" EndPoint="775.75,25.25" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="224.5,25.5" EndPoint="775.5,25.5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="576.77,773.2" EndPoint="776.77,573.2" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="775.75,25.5" EndPoint="776.25,573.5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="223.77,573.08" EndPoint="223.77,523.08" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" DashCap="Round" LineJoin="Miter">
<Pen.DashStyle>
<DashStyle Offset="0" Dashes="1.791 1.791" />
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="223.77,433.53" EndPoint="223.77,120.1" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="223.77,75.32" EndPoint="223.77,25.32" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25.77,772.2" EndPoint="61.12,736.85" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" DashCap="Round" LineJoin="Miter">
<Pen.DashStyle>
<DashStyle Offset="0" Dashes="1.219 1.219" />
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="104.22,693.75" EndPoint="168.86,629.1" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="190.41,607.56" EndPoint="225.77,572.2" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="223.89,572.01" EndPoint="273.89,572.04" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" DashCap="Round" LineJoin="Miter">
<Pen.DashStyle>
<DashStyle Offset="0" Dashes="1.791 1.791" />
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="363.44,572.11" EndPoint="676.87,572.33" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="721.65,572.36" EndPoint="771.65,572.4" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.Cone">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V750 H579.5 V0 H0 Z">
<DrawingGroup Transform="1,0,0,1,-210,-175">
<GeometryDrawing Geometry="F1 M579.5,750z M0,0z M764.5,800C764.5,855.23 646.08,900 500,900 353.92,900 235.5,855.23 235.5,800">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-210,-175">
<GeometryDrawing Geometry="F1 M579.5,750z M0,0z M235.5,800C235.5,785,244.17,770.87,259.72,758.14">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-210,-175">
<GeometryDrawing Geometry="F1 M579.5,750z M0,0z M350.75,717.43C393.23,706.43 444.63,700 500,700 578.18,700 648.44,712.82 696.87,733.21">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" DashCap="Round" LineJoin="Miter">
<Pen.DashStyle>
<DashStyle Offset="0" Dashes="2.0084 2.0084" />
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-210,-175">
<GeometryDrawing Geometry="F1 M579.5,750z M0,0z M740.28,758.14C755.83,770.87,764.5,785.05,764.5,800">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="290,25" EndPoint="554,625" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,625" EndPoint="290,25" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.Cylinder">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V850 H579.5 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<EllipseGeometry RadiusX="264.5" RadiusY="100" Center="290,125" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<DrawingGroup Transform="1,0,0,1,-210,-75">
<GeometryDrawing Geometry="F1 M579.5,850z M0,0z M764.5,800C764.5,855.23 646.08,900 500,900 353.92,900 235.5,855.23 235.5,800">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-210,-75">
<GeometryDrawing Geometry="F1 M579.5,850z M0,0z M235.5,800C235.5,785,244.17,770.87,259.72,758.14">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-210,-75">
<GeometryDrawing Geometry="F1 M579.5,850z M0,0z M350.75,717.43C393.23,706.43 444.63,700 500,700 578.18,700 648.44,712.82 696.87,733.21">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" DashCap="Round" LineJoin="Miter">
<Pen.DashStyle>
<DashStyle Offset="0" Dashes="2.0084 2.0084" />
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-210,-75">
<GeometryDrawing Geometry="F1 M579.5,850z M0,0z M740.28,758.14C755.83,770.87,764.5,785.05,764.5,800">
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,125" EndPoint="25,725" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="554,125" EndPoint="554,725" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.Line">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V750.75 H750.75 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,725.75" EndPoint="725.75,25" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.DashedLine">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V750.75 H750.75 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,725.75" EndPoint="60.36,690.39" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" DashCap="Round" LineJoin="Miter">
<Pen.DashStyle>
<DashStyle Offset="0" Dashes="1.98 1.98" />
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="130.36,620.39" EndPoint="655.39,95.36" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="690.39,60.36" EndPoint="725.75,25" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.ArrowLine">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V752.41 H755.16 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,727.41" EndPoint="725.75,26.66" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="725.87,25" EndPoint="375.38,28.04" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="730.16,376.99" EndPoint="727.12,26.49" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.Rectangle">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V750.96 H753.21 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,25" EndPoint="725,25.5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="25,725.25" EndPoint="25,25.25" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="728.21,725.96" EndPoint="728.21,25.96" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="26,725.25" EndPoint="726,725.75" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.Ellipse">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V825 H825 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="#666666" Thickness="50" StartLineCap="Round" EndLineCap="Round" LineJoin="Miter" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<EllipseGeometry RadiusX="387.5" RadiusY="387.5" Center="412.5,412.5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="DrawShapeImageSource.DrawShapeIcon">
<DrawingImage.Drawing>
<DrawingGroup ClipGeometry="M0,0 V806.56 H868.59 V0 H0 Z">
<DrawingGroup Transform="1,0,0,1,-65.71,-96.72">
<GeometryDrawing Brush="#666666" Geometry="F1 M868.59,806.56z M0,0z M562,655.39C561.93,792.12 450.68,903.27 313.89,903.28 176.7,903.28 65.51,791.82 65.73,654.48 65.94,517.88 177.42,406.93 314.32,407.07 451,407.21 562.05,518.56 562,655.39z M500.25,655.54C500.35,552.64 417.25,469.02 314.71,468.81 211.25,468.59 127.57,551.72 127.47,654.81 127.38,757.71 210.47,841.32 313.01,841.54 416.45,841.76 500.14,758.62 500.23,655.54z" />
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-65.71,-96.72">
<GeometryDrawing Brush="#666666" Geometry="F1 M868.59,806.56z M0,0z M587.75,717.08C590.08,696.17,592.29,676.36,594.63,655.48L849.63,655.48 665.33,341.9 559.18,518.72C557.47,516.72 556.07,515.23 554.89,513.61 544.47,499.26 534.31,484.7 523.53,470.61 520.53,466.67 519.89,464.18 522.53,459.79 561.22,395.63 599.59,331.27 638.32,267.13 652.23,244.13 679.84,244.98 693.8,268.7Q776.62,409.4,859.25,550.18C881.99,588.88 904.58,627.67 927.57,666.23 934.57,677.94 937.26,689.46 929.99,701.77 922.99,713.65 911.99,717.2 898.71,717.17Q748.39,716.92,598.07,717.08z" />
</DrawingGroup>
<DrawingGroup Transform="1,0,0,1,-65.71,-96.72">
<GeometryDrawing Brush="#666666" Geometry="F1 M868.59,806.56z M0,0z M562.23,328.74L562.23,159 251.88,159 251.88,381.15 190.34,402.94C190.19,400.16,189.88,397.13,189.88,394.11Q189.88,263.25 189.88,132.39 189.88,96.75 225.73,96.73 407.01,96.73 588.3,96.73 624.05,96.73 624.07,132.46C624.07,164.13 624.24,195.79 623.89,227.46 623.89,231.46 621.66,235.77 619.56,239.46 616.56,244.74 612.34,249.36 609.18,254.59 594.18,279.42 579.28,304.36 564.35,329.26z" />
</DrawingGroup>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</ResourceDictionary>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 868.59 806.56"><defs><style>.cls-1{fill:#fff;}</style></defs><title>DrawShapeIcon</title><path d="M562,655.39c-.07,136.73-111.32,247.88-248.11,247.89-137.19,0-248.38-111.46-248.16-248.8.21-136.6,111.69-247.55,248.59-247.41C451,407.21,562.05,518.56,562,655.39Zm-61.75.15c.1-102.9-83-186.52-185.54-186.73-103.46-.22-187.14,82.91-187.24,186-.09,102.9,83,186.51,185.54,186.73C416.45,841.76,500.14,758.62,500.23,655.54Z" transform="translate(-65.71 -96.72)"/><path d="M587.75,717.08c2.33-20.91,4.54-40.72,6.88-61.6h255L665.33,341.9,559.18,518.72c-1.71-2-3.11-3.49-4.29-5.11-10.42-14.35-20.58-28.91-31.36-43-3-3.94-3.64-6.43-1-10.82,38.69-64.16,77.06-128.52,115.79-192.66,13.91-23,41.52-22.15,55.48,1.57Q776.62,409.4,859.25,550.18c22.74,38.7,45.33,77.49,68.32,116.05,7,11.71,9.69,23.23,2.42,35.54-7,11.88-18,15.43-31.28,15.4q-150.32-.25-300.64-.09Z" transform="translate(-65.71 -96.72)"/><path d="M562.23,328.74V159H251.88V381.15l-61.54,21.79c-.15-2.78-.46-5.81-.46-8.83q0-130.86,0-261.72,0-35.64,35.85-35.66,181.28,0,362.57,0,35.75,0,35.77,35.73c0,31.67.17,63.33-.18,95,0,4-2.23,8.31-4.33,12-3,5.28-7.22,9.9-10.38,15.13-15,24.83-29.9,49.77-44.83,74.67Z" transform="translate(-65.71 -96.72)"/><path class="cls-1" d="M500.23,655.54c-.09,103.08-83.78,186.22-187.24,186-102.55-.22-185.63-83.83-185.54-186.73.1-103.09,83.78-186.22,187.24-186C417.25,469,500.33,552.64,500.23,655.54Z" transform="translate(-65.71 -96.72)"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 755.16 752.41"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}</style></defs><title>ShapeArrowLine</title><line class="cls-1" x1="25" y1="727.41" x2="725.75" y2="26.66"/><line class="cls-1" x1="725.87" y1="25" x2="375.38" y2="28.04"/><line class="cls-1" x1="730.16" y1="376.99" x2="727.12" y2="26.49"/></svg>

After

Width:  |  Height:  |  Size: 450 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 825 825"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;}.cls-1{stroke-width:50px;}.cls-2{stroke-width:100px;}</style></defs><title>ShapeCircle</title><circle class="cls-1" cx="412.5" cy="412.5" r="387.5"/><line class="cls-2" x1="412.45" y1="412.55" x2="412.55" y2="412.45"/></svg>

After

Width:  |  Height:  |  Size: 411 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 579.5 750"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}.cls-2{stroke-dasharray:100.42 100.42;}</style></defs><title>ShapeCone</title><path class="cls-1" d="M764.5,800c0,55.23-118.42,100-264.5,100S235.5,855.23,235.5,800" transform="translate(-210 -175)"/><path class="cls-1" d="M235.5,800c0-15,8.67-29.13,24.22-41.86" transform="translate(-210 -175)"/><path class="cls-2" d="M350.75,717.43C393.23,706.43,444.63,700,500,700c78.18,0,148.44,12.82,196.87,33.21" transform="translate(-210 -175)"/><path class="cls-1" d="M740.28,758.14c15.55,12.73,24.22,26.91,24.22,41.86" transform="translate(-210 -175)"/><line class="cls-1" x1="290" y1="25" x2="554" y2="625"/><line class="cls-1" x1="25" y1="625" x2="290" y2="25"/></svg>

After

Width:  |  Height:  |  Size: 869 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 801.77 798.2"><defs><style>.cls-1,.cls-2,.cls-3,.cls-4{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}.cls-2{stroke-dasharray:89.55 89.55;}.cls-3{stroke-dasharray:60.95 60.95;}.cls-4{stroke-dasharray:89.55 89.55;}</style></defs><title>ShapeCuboid</title><line class="cls-1" x1="25.23" y1="224.28" x2="572.99" y2="224.67"/><line class="cls-1" x1="25.23" y1="772.23" x2="25.23" y2="224.47"/><line class="cls-1" x1="575.5" y1="772.79" x2="575.5" y2="225.03"/><line class="cls-1" x1="26.01" y1="772.23" x2="573.77" y2="772.62"/><line class="cls-1" x1="25" y1="225" x2="225" y2="25"/><line class="cls-1" x1="575.75" y1="225.25" x2="775.75" y2="25.25"/><line class="cls-1" x1="224.5" y1="25.5" x2="775.5" y2="25.5"/><line class="cls-1" x1="576.77" y1="773.2" x2="776.77" y2="573.2"/><line class="cls-1" x1="775.75" y1="25.5" x2="776.25" y2="573.5"/><line class="cls-1" x1="223.77" y1="573.08" x2="223.77" y2="523.08"/><line class="cls-2" x1="223.77" y1="433.53" x2="223.77" y2="120.1"/><line class="cls-1" x1="223.77" y1="75.32" x2="223.77" y2="25.32"/><line class="cls-1" x1="25.77" y1="772.2" x2="61.12" y2="736.85"/><line class="cls-3" x1="104.22" y1="693.75" x2="168.86" y2="629.1"/><line class="cls-1" x1="190.41" y1="607.56" x2="225.77" y2="572.2"/><line class="cls-1" x1="223.89" y1="572.01" x2="273.89" y2="572.04"/><line class="cls-4" x1="363.44" y1="572.11" x2="676.87" y2="572.33"/><line class="cls-1" x1="721.65" y1="572.36" x2="771.65" y2="572.4"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 579.5 850"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}.cls-2{stroke-dasharray:100.42 100.42;}</style></defs><title>ShapeCylinder</title><ellipse class="cls-1" cx="290" cy="125" rx="264.5" ry="100"/><path class="cls-1" d="M764.5,800c0,55.23-118.42,100-264.5,100S235.5,855.23,235.5,800" transform="translate(-210 -75)"/><path class="cls-1" d="M235.5,800c0-15,8.67-29.13,24.22-41.86" transform="translate(-210 -75)"/><path class="cls-2" d="M350.75,717.43C393.23,706.43,444.63,700,500,700c78.18,0,148.44,12.82,196.87,33.21" transform="translate(-210 -75)"/><path class="cls-1" d="M740.28,758.14c15.55,12.73,24.22,26.91,24.22,41.86" transform="translate(-210 -75)"/><line class="cls-1" x1="25" y1="125" x2="25" y2="725"/><line class="cls-1" x1="554" y1="125" x2="554" y2="725"/></svg>

After

Width:  |  Height:  |  Size: 932 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750.75 750.75"><defs><style>.cls-1,.cls-2{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}.cls-2{stroke-dasharray:99 99;}</style></defs><title>ShapeDashedLine</title><line class="cls-1" x1="25" y1="725.75" x2="60.36" y2="690.39"/><line class="cls-2" x1="130.36" y1="620.39" x2="655.39" y2="95.36"/><line class="cls-1" x1="690.39" y1="60.36" x2="725.75" y2="25"/></svg>

After

Width:  |  Height:  |  Size: 489 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 825 825"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}</style></defs><title>ShapeEllipse</title><circle class="cls-1" cx="412.5" cy="412.5" r="387.5"/></svg>

After

Width:  |  Height:  |  Size: 301 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750.75 750.75"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}</style></defs><title>ShapeLine</title><line class="cls-1" x1="25" y1="725.75" x2="725.75" y2="25"/></svg>

After

Width:  |  Height:  |  Size: 310 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 753.21 750.96"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:50px;}</style></defs><title>ShapeRectangle</title><line class="cls-1" x1="25" y1="25" x2="725" y2="25.5"/><line class="cls-1" x1="25" y1="725.25" x2="25" y2="25.25"/><line class="cls-1" x1="728.21" y1="725.96" x2="728.21" y2="25.96"/><line class="cls-1" x1="26" y1="725.25" x2="726" y2="725.75"/></svg>

After

Width:  |  Height:  |  Size: 500 B