mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
程序添加绘图元素,Demo完成一半
This commit is contained in:
@@ -20,6 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public ColorPickerDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable) : base(root, drawMode, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ColorPickerDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable) : base(root, drawMode, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public DirectLineDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -31,6 +36,28 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
{
|
||||
if (Points?.Count > 1)
|
||||
{
|
||||
var geometry = new PathGeometry();
|
||||
var figure = new PathFigure { StartPoint = Points[0] };
|
||||
geometry.Figures.Add(figure);
|
||||
|
||||
foreach (var point in Points)
|
||||
{
|
||||
if (Points[0] == point) continue;
|
||||
|
||||
LineSegment arc = new LineSegment(point, true);
|
||||
geometry.Figures[0].Segments.Add(arc);
|
||||
}
|
||||
|
||||
Geometry = geometry;
|
||||
IsFinish = true;
|
||||
}
|
||||
base.InitNew();
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
var point = e.GetPosition(sender);
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Media3D;
|
||||
using System.Windows.Shapes;
|
||||
using System.Windows.Controls;
|
||||
using AIStudio.Wpf.DiagramDesigner.Models;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner
|
||||
@@ -20,22 +16,18 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, Point startPoint, bool erasable) : base(root)
|
||||
public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, Point startPoint, bool erasable) : this(root, drawMode, new List<Point> { startPoint }, erasable, false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public DrawingDesignerItemViewModelBase(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable, bool isFinish = true) : base(root)
|
||||
{
|
||||
DrawMode = drawMode;
|
||||
Points = new List<Point> { startPoint };
|
||||
Points = points;
|
||||
Erasable = erasable;
|
||||
if (Erasable)
|
||||
{
|
||||
if (Root?.DrawModeViewModel != null)
|
||||
{
|
||||
this.ColorViewModel = CopyHelper.Mapper(Root.DrawModeViewModel.DrawingColorViewModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ColorViewModel = CopyHelper.Mapper(_service.DrawModeViewModel.DrawingColorViewModel);
|
||||
}
|
||||
}
|
||||
IsFinish = isFinish;
|
||||
InitNewDrawing();
|
||||
}
|
||||
|
||||
public DrawingDesignerItemViewModelBase(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
@@ -55,7 +47,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
protected override void Init(IDiagramViewModel root, bool initNew)
|
||||
{
|
||||
base.Init(root, initNew);
|
||||
base.Init(root, initNew);
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
@@ -63,6 +55,26 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
ClearConnectors();
|
||||
}
|
||||
|
||||
protected virtual void InitNewDrawing()
|
||||
{
|
||||
if (IsFinish)
|
||||
{
|
||||
OnMouseUp(null, null);
|
||||
this.SelectedDisable = Erasable;
|
||||
}
|
||||
else if (Erasable)
|
||||
{
|
||||
if (Root?.DrawModeViewModel != null)
|
||||
{
|
||||
this.ColorViewModel = CopyHelper.Mapper(Root.DrawModeViewModel.DrawingColorViewModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ColorViewModel = CopyHelper.Mapper(_service.DrawModeViewModel.DrawingColorViewModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
|
||||
{
|
||||
base.LoadDesignerItemViewModel(designerbase);
|
||||
@@ -70,8 +82,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (designerbase is DrawingDesignerItemBase designer)
|
||||
{
|
||||
this.Erasable = designer.Erasable;
|
||||
this.Geometry = Geometry.Parse(designer.Geometry).GetFlattenedPathGeometry();
|
||||
//this.Geometry.Transform = Transform.Parse(designer.Matrix.ToString());
|
||||
this.Geometry = PathGeometry.CreateFromGeometry(Geometry.Parse(designer.Geometry));
|
||||
if (!string.IsNullOrEmpty(designer.Matrix))
|
||||
{
|
||||
this.Geometry.Transform = Transform.Parse(designer.Matrix);
|
||||
}
|
||||
this.Points = designer.Points;
|
||||
this.DrawMode = designer.DrawMode;
|
||||
this.SelectedDisable = Erasable;
|
||||
@@ -92,26 +107,32 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
if (IsFinish)
|
||||
{
|
||||
IsLoaded = false;
|
||||
if (Geometry != null)
|
||||
{
|
||||
if (Geometry.Transform is TransformGroup transformGroup)
|
||||
{
|
||||
TranslateTransform translateTransform = transformGroup.Children.OfType<TranslateTransform>().FirstOrDefault();
|
||||
transformGroup.Children.Remove(translateTransform); ;
|
||||
transformGroup.Children.Remove(translateTransform);
|
||||
transformGroup.Children.Add(new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top));
|
||||
}
|
||||
else
|
||||
Geometry.Transform = new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top);
|
||||
|
||||
{
|
||||
transformGroup = new TransformGroup();
|
||||
transformGroup.Children.Add(new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top));
|
||||
Geometry.Transform = transformGroup;
|
||||
}
|
||||
|
||||
if (Erasable)
|
||||
{
|
||||
var aPen = new Pen(ColorViewModel.LineColor.ToBrush(), ColorViewModel.LineWidth);
|
||||
aPen.DashStyle = new DashStyle(StrokeDashArray.Dash[(int)ColorViewModel.LineDashStyle], 1);
|
||||
Geometry = Geometry.GetWidenedPathGeometry(aPen); //可擦除,需要把Geometry转成几何图像,所以不能有填充色
|
||||
|
||||
|
||||
}
|
||||
UpdateLocation();
|
||||
}
|
||||
IsLoaded = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -177,23 +198,23 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
get; set;
|
||||
}
|
||||
|
||||
public void UpdateLocation()
|
||||
#region 属性改变
|
||||
protected override void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (Erasable)
|
||||
if (IsLoaded == false) return;
|
||||
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
ItemWidth = Geometry.Bounds.Width - ColorViewModel.LineWidth * 0.5;
|
||||
ItemHeight = Geometry.Bounds.Height - ColorViewModel.LineWidth * 0.5;
|
||||
Left = Points[0].X;
|
||||
Top = Points[0].Y;
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemWidth = Geometry.Bounds.Width;
|
||||
ItemHeight = Geometry.Bounds.Height;
|
||||
Left = Points[0].X;
|
||||
Top = Points[0].Y;
|
||||
case nameof(ItemWidth):
|
||||
case nameof(ItemHeight):
|
||||
{
|
||||
|
||||
UpdateTransform();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override void RemoveFromSelection()
|
||||
{
|
||||
@@ -213,5 +234,42 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
base.AddToSelection(selected, clearother);
|
||||
}
|
||||
|
||||
protected virtual void UpdateLocation()
|
||||
{
|
||||
if (Erasable)
|
||||
{
|
||||
ItemWidth = Geometry.Bounds.Width - ColorViewModel.LineWidth * 0.5;
|
||||
ItemHeight = Geometry.Bounds.Height - ColorViewModel.LineWidth * 0.5;
|
||||
Left = Points[0].X;
|
||||
Top = Points[0].Y;
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemWidth = Geometry.Bounds.Width + ColorViewModel.LineWidth * 0.5;
|
||||
ItemHeight = Geometry.Bounds.Height + ColorViewModel.LineWidth * 0.5;
|
||||
Left = Points[0].X;
|
||||
Top = Points[0].Y;
|
||||
}
|
||||
}
|
||||
|
||||
protected void UpdateTransform()
|
||||
{
|
||||
if (Geometry.Transform is TransformGroup transformGroup)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
transformGroup = new TransformGroup();
|
||||
Geometry.Transform = transformGroup;
|
||||
}
|
||||
|
||||
ScaleTransform scaleTransform = transformGroup.Children.OfType<ScaleTransform>().FirstOrDefault();
|
||||
transformGroup.Children.Remove(scaleTransform); ;
|
||||
|
||||
double radiox = ItemWidth / Geometry.Bounds.Width;
|
||||
double radioy = ItemHeight / Geometry.Bounds.Height;
|
||||
transformGroup.Children.Add(new ScaleTransform(radiox, radioy));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableRectangle, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public EllipseDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -30,6 +35,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNewDrawing()
|
||||
{
|
||||
if (IsFinish)
|
||||
{
|
||||
Geometry = new EllipseGeometry(new Rect(Points[0], Points[1]));
|
||||
}
|
||||
base.InitNewDrawing();
|
||||
}
|
||||
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
|
||||
@@ -22,6 +22,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public EraserDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, bool erasable) : base(root, drawMode, null, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public EraserDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
|
||||
@@ -22,6 +22,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public EraserPreviewDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable) : base(root, drawMode, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public EraserPreviewDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
|
||||
@@ -18,7 +18,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, bool erasable) : base(root, DrawMode.ErasableLine, startPoint, erasable)
|
||||
{
|
||||
{
|
||||
}
|
||||
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableLine, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public LineDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
@@ -31,6 +36,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNewDrawing()
|
||||
{
|
||||
if (IsFinish)
|
||||
{
|
||||
Geometry = new LineGeometry(Points[0], Points[1]);
|
||||
}
|
||||
base.InitNewDrawing();
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
@@ -63,7 +77,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool OnMouseDown(IInputElement sender, MouseButtonEventArgs e)
|
||||
@@ -74,6 +88,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
public override bool OnMouseUp(IInputElement sender, MouseButtonEventArgs e)
|
||||
{
|
||||
return base.OnMouseUp(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable) : base(root, drawMode, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public PolygonDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -27,6 +32,29 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
{
|
||||
if (Points?.Count > 1)
|
||||
{
|
||||
var geometry = new PathGeometry();
|
||||
var figure = new PathFigure { StartPoint = Points[0] };
|
||||
figure.IsClosed = true;
|
||||
geometry.Figures.Add(figure);
|
||||
|
||||
foreach (var point in Points)
|
||||
{
|
||||
if (Points[0] == point) continue;
|
||||
|
||||
LineSegment arc = new LineSegment(point, true) { IsSmoothJoin = true };
|
||||
geometry.Figures[0].Segments.Add(arc);
|
||||
}
|
||||
|
||||
Geometry = geometry;
|
||||
IsFinish = true;
|
||||
}
|
||||
base.InitNew();
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
|
||||
@@ -22,6 +22,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable) : base(root, drawMode, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public PolylineDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -32,6 +37,28 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
{
|
||||
if (Points?.Count > 1)
|
||||
{
|
||||
var geometry = new PathGeometry();
|
||||
var figure = new PathFigure { StartPoint = Points[0] };
|
||||
geometry.Figures.Add(figure);
|
||||
|
||||
foreach (var point in Points)
|
||||
{
|
||||
if (Points[0] == point) continue;
|
||||
|
||||
LineSegment arc = new LineSegment(point, true) { IsSmoothJoin = true };
|
||||
geometry.Figures[0].Segments.Add(arc);
|
||||
}
|
||||
|
||||
Geometry = geometry;
|
||||
IsFinish= true;
|
||||
}
|
||||
base.InitNew();
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
@@ -61,7 +88,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
geometry.Figures.Add(figure);
|
||||
}
|
||||
|
||||
LineSegment arc = new LineSegment(point, true);// { IsSmoothJoin = true };
|
||||
LineSegment arc = new LineSegment(point, true) { IsSmoothJoin = true };
|
||||
geometry.Figures[0].Segments.Add(arc);
|
||||
Geometry = geometry;
|
||||
|
||||
|
||||
@@ -20,6 +20,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, List<Point> points, bool erasable) : base(root, DrawMode.ErasableRectangle, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public RectangleDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -30,6 +35,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNewDrawing()
|
||||
{
|
||||
if (IsFinish)
|
||||
{
|
||||
Geometry = new RectangleGeometry(new Rect(Points[0], Points[1]));
|
||||
}
|
||||
base.InitNewDrawing();
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
|
||||
@@ -21,6 +21,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
}
|
||||
|
||||
public SharpDrawingDesignerItemViewModel(IDiagramViewModel root, DrawMode drawMode, List<Point> points, bool erasable) : base(root, drawMode, points, erasable)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public SharpDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -31,6 +36,24 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
{
|
||||
if (Points?.Count > 1)
|
||||
{
|
||||
var path = GetPath();
|
||||
PathGeometry pathGeometry = PathGeometry.CreateFromGeometry(Geometry.Parse(path));
|
||||
var transformGroup = new TransformGroup();
|
||||
double radiox = Math.Abs(Points[1].X - Points[0].X) / pathGeometry.Bounds.Width;
|
||||
double radioy = Math.Abs(Points[1].Y - Points[0].Y) / pathGeometry.Bounds.Height;
|
||||
transformGroup.Children.Add(new TranslateTransform((Points[0].X) / radiox - pathGeometry.Bounds.Left, (Points[0].Y) / radioy - pathGeometry.Bounds.Top));
|
||||
transformGroup.Children.Add(new ScaleTransform(radiox, radioy));
|
||||
pathGeometry.Transform = transformGroup;
|
||||
Geometry = pathGeometry;
|
||||
IsFinish = true;
|
||||
}
|
||||
base.InitNew();
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
@@ -61,25 +84,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
Points.Add(point);
|
||||
}
|
||||
|
||||
string path = "";
|
||||
switch (DrawMode)
|
||||
{
|
||||
case DrawMode.ErasableTriangle: path = "M50,0 L100,100 0,100 z"; break;
|
||||
case DrawMode.ErasableRhombus: path = "M50,0 L100,100 50,200 0,100 z"; break;
|
||||
case DrawMode.ErasableHexagon: path = "M50,0 150,0 200,100 150,200 50,200 0,100 Z"; break;
|
||||
case DrawMode.ErasablePentagram: path = "M 12.8604,10.4421L 11,6.0593L 9.13781,10.4463L 4.39462,10.8613L 7.99148,13.988L 6.92042,18.6273L 11.0056,16.1727L 15.0868,18.625L 14.0147,13.9812L 17.6082,10.8575L 12.8604,10.4421 Z"; break;
|
||||
case DrawMode.ErasableStarFour: path = "M12,6.7L13.45,10.55L17.3,12L13.45,13.45L12,17.3L10.55,13.45L6.7,12L10.55,10.55L12,6.7"; break;
|
||||
case DrawMode.ErasableStarThree: path = "M12,9.5L13.2,13.5L16,16.5L12,15.6L7.9,16.5L10.7,13.5L12,9.5"; break;
|
||||
case DrawMode.ErasableChat: path = "M171.008 964.398545c-43.938909 0-70.306909-11.729455-76.288-33.931636-2.746182-10.216727-2.746182-30.045091 28.16-48.011636 24.855273-14.475636 47.569455-36.189091 67.677091-64.651636-117.946182-86.481455-185.134545-212.689455-185.134545-349.556364 0-249.693091 227.188364-452.864 506.414545-452.864 279.435636 0 506.740364 203.147636 506.740364 452.864 0 249.739636-227.328 452.933818-506.717091 452.933818-49.664 0-99.281455-6.702545-147.618909-19.921455C296.471273 947.688727 220.695273 964.398545 171.008 964.398545z"; break;
|
||||
case DrawMode.ErasableComment: path = "M928.078587 0h-838.26453C40.296574 0 0 40.296574 0 89.814057v598.760379c0 49.517483 40.296574 89.814057 89.814057 89.814057H119.752076v245.611507L400.450941 778.388493H928.078587c49.517483 0 89.814057-40.296574 89.814057-89.814057v-598.760379c0-49.517483-40.296574-89.814057-89.814057-89.814057z"; break;
|
||||
case DrawMode.ErasableCloud: path = "M224.219429 836.644571h531.858285c140.562286 0 245.138286-106.715429 245.138286-239.140571 0-136.283429-111.433143-236.141714-256.731429-236.141714-53.558857-105.874286-152.978286-174.006857-276.845714-174.006857-161.133714 0-293.997714 125.988571-308.132571 285.44-77.586286 22.272-136.722286 89.984-136.722286 180.425142 0 101.12 73.709714 183.405714 201.435429 183.405715z"; break;
|
||||
case DrawMode.ErasableArrowRight: path = "M11,16H3V8H11V2L21,12L11,22V16"; break;
|
||||
case DrawMode.ErasableArrowLeft: path = "M13,22L3,12L13,2V8H21V16H13V22"; break;
|
||||
case DrawMode.ErasableCheck: path = "M0,50 L30,100 100,0"; break;
|
||||
case DrawMode.ErasableClose: path = "M0,0 L100,100 M0,100 L100,0"; break;
|
||||
case DrawMode.ErasableHeart: path = "M510.68 883.15c-15.2 0-30.37-8.49-48.1-25.47-25.35-24.3-50.81-48.48-76.27-72.64-61.6-58.49-125.28-118.96-186.38-180.25-68.39-68.6-99.26-141.23-94.39-222.07 4.09-67.79 31.08-122.65 78.06-158.66 50.62-38.79 123.3-53.23 194.46-38.6 51.71 10.63 90 41.18 127.03 70.72l1.54 1.23c0.47 0.38 0.94 0.76 1.41 1.13 8.05-5.05 15.94-10.15 23.68-15.13 30.01-19.35 58.34-37.63 90.38-50.54 84.26-33.9 189.34-8.11 244.51 60.07 58.08 71.79 68.23 157.45 28.57 241.22-20 42.22-50.67 84.68-91.16 126.22-57.91 59.41-118.94 117.32-177.96 173.33-22.3 21.16-44.59 42.32-66.77 63.59-17.98 17.22-33.31 25.85-48.61 25.85z"; break;
|
||||
}
|
||||
|
||||
var path = GetPath();
|
||||
PathGeometry pathGeometry = PathGeometry.CreateFromGeometry(Geometry.Parse(path));
|
||||
var transformGroup = new TransformGroup();
|
||||
double radiox = Math.Abs(point.X - Points[0].X) / pathGeometry.Bounds.Width;
|
||||
@@ -108,5 +113,29 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
return base.OnMouseUp(sender, e);
|
||||
}
|
||||
|
||||
private string GetPath()
|
||||
{
|
||||
string path = "";
|
||||
switch (DrawMode)
|
||||
{
|
||||
case DrawMode.ErasableTriangle: path = "M50,0 L100,100 0,100 z"; break;
|
||||
case DrawMode.ErasableRhombus: path = "M50,0 L100,100 50,200 0,100 z"; break;
|
||||
case DrawMode.ErasableHexagon: path = "M50,0 150,0 200,100 150,200 50,200 0,100 Z"; break;
|
||||
case DrawMode.ErasablePentagram: path = "M 12.8604,10.4421L 11,6.0593L 9.13781,10.4463L 4.39462,10.8613L 7.99148,13.988L 6.92042,18.6273L 11.0056,16.1727L 15.0868,18.625L 14.0147,13.9812L 17.6082,10.8575L 12.8604,10.4421 Z"; break;
|
||||
case DrawMode.ErasableStarFour: path = "M12,6.7L13.45,10.55L17.3,12L13.45,13.45L12,17.3L10.55,13.45L6.7,12L10.55,10.55L12,6.7"; break;
|
||||
case DrawMode.ErasableStarThree: path = "M12,9.5L13.2,13.5L16,16.5L12,15.6L7.9,16.5L10.7,13.5L12,9.5"; break;
|
||||
case DrawMode.ErasableChat: path = "M171.008 964.398545c-43.938909 0-70.306909-11.729455-76.288-33.931636-2.746182-10.216727-2.746182-30.045091 28.16-48.011636 24.855273-14.475636 47.569455-36.189091 67.677091-64.651636-117.946182-86.481455-185.134545-212.689455-185.134545-349.556364 0-249.693091 227.188364-452.864 506.414545-452.864 279.435636 0 506.740364 203.147636 506.740364 452.864 0 249.739636-227.328 452.933818-506.717091 452.933818-49.664 0-99.281455-6.702545-147.618909-19.921455C296.471273 947.688727 220.695273 964.398545 171.008 964.398545z"; break;
|
||||
case DrawMode.ErasableComment: path = "M928.078587 0h-838.26453C40.296574 0 0 40.296574 0 89.814057v598.760379c0 49.517483 40.296574 89.814057 89.814057 89.814057H119.752076v245.611507L400.450941 778.388493H928.078587c49.517483 0 89.814057-40.296574 89.814057-89.814057v-598.760379c0-49.517483-40.296574-89.814057-89.814057-89.814057z"; break;
|
||||
case DrawMode.ErasableCloud: path = "M224.219429 836.644571h531.858285c140.562286 0 245.138286-106.715429 245.138286-239.140571 0-136.283429-111.433143-236.141714-256.731429-236.141714-53.558857-105.874286-152.978286-174.006857-276.845714-174.006857-161.133714 0-293.997714 125.988571-308.132571 285.44-77.586286 22.272-136.722286 89.984-136.722286 180.425142 0 101.12 73.709714 183.405714 201.435429 183.405715z"; break;
|
||||
case DrawMode.ErasableArrowRight: path = "M11,16H3V8H11V2L21,12L11,22V16"; break;
|
||||
case DrawMode.ErasableArrowLeft: path = "M13,22L3,12L13,2V8H21V16H13V22"; break;
|
||||
case DrawMode.ErasableCheck: path = "M0,50 L30,100 100,0"; break;
|
||||
case DrawMode.ErasableClose: path = "M0,0 L100,100 M0,100 L100,0"; break;
|
||||
case DrawMode.ErasableHeart: path = "M510.68 883.15c-15.2 0-30.37-8.49-48.1-25.47-25.35-24.3-50.81-48.48-76.27-72.64-61.6-58.49-125.28-118.96-186.38-180.25-68.39-68.6-99.26-141.23-94.39-222.07 4.09-67.79 31.08-122.65 78.06-158.66 50.62-38.79 123.3-53.23 194.46-38.6 51.71 10.63 90 41.18 127.03 70.72l1.54 1.23c0.47 0.38 0.94 0.76 1.41 1.13 8.05-5.05 15.94-10.15 23.68-15.13 30.01-19.35 58.34-37.63 90.38-50.54 84.26-33.9 189.34-8.11 244.51 60.07 58.08 71.79 68.23 157.45 28.57 241.22-20 42.22-50.67 84.68-91.16 126.22-57.91 59.41-118.94 117.32-177.96 173.33-22.3 21.16-44.59 42.32-66.77 63.59-17.98 17.22-33.31 25.85-48.61 25.85z"; break;
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
AddTextBox();
|
||||
}
|
||||
|
||||
public TextDrawingDesignerItemViewModel(IDiagramViewModel root, Point startPoint, string text, bool erasable) : base(root, DrawMode.Text, new List<Point> { startPoint }, erasable)
|
||||
{
|
||||
Text = text;
|
||||
InitNewDrawing();
|
||||
}
|
||||
|
||||
public TextDrawingDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
{
|
||||
|
||||
@@ -27,26 +33,49 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
protected override void Init(IDiagramViewModel root, bool initNew)
|
||||
{
|
||||
base.Init(root, initNew);
|
||||
|
||||
CustomText = true;
|
||||
}
|
||||
|
||||
protected override void InitNewDrawing()
|
||||
{
|
||||
if (IsFinish)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Text))
|
||||
{
|
||||
IsLoaded = false;
|
||||
var typeface = new Typeface(new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch);
|
||||
var formattedText = new FormattedText(Text,
|
||||
System.Globalization.CultureInfo.InvariantCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
typeface,
|
||||
FontViewModel.FontSize,
|
||||
new SolidColorBrush(FontViewModel.FontColor));
|
||||
|
||||
Geometry = formattedText.BuildGeometry(new Point()).GetFlattenedPathGeometry();
|
||||
UpdateLocation();
|
||||
IsLoaded = true;
|
||||
}
|
||||
this.SelectedDisable = Erasable;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool OnMouseMove(IInputElement sender, MouseEventArgs e)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool OnMouseDown(IInputElement sender, MouseButtonEventArgs e)
|
||||
{
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool OnMouseUp(IInputElement sender, MouseButtonEventArgs e)
|
||||
{
|
||||
return base.OnMouseUp(sender, e);
|
||||
}
|
||||
|
||||
protected override void Init(IDiagramViewModel root, bool initNew)
|
||||
{
|
||||
base.Init(root, initNew);
|
||||
|
||||
CustomText = true;
|
||||
return base.OnMouseUp(sender, e);
|
||||
}
|
||||
|
||||
TextDesignerItemViewModel _previewTextDesign;
|
||||
@@ -65,21 +94,22 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void _previewTextDesign_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName== nameof(IsEditing) && _previewTextDesign.IsEditing == false)
|
||||
if (e.PropertyName == nameof(IsEditing) && _previewTextDesign.IsEditing == false)
|
||||
{
|
||||
_previewTextDesign.PropertyChanged -= _previewTextDesign_PropertyChanged;
|
||||
Root?.Remove(_previewTextDesign);
|
||||
|
||||
Text = _previewTextDesign?.Text;
|
||||
|
||||
Text = _previewTextDesign?.Text;
|
||||
if (!string.IsNullOrEmpty(Text))
|
||||
{
|
||||
{
|
||||
IsLoaded = false;
|
||||
var typeface = new Typeface(new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch);
|
||||
var formattedText = new FormattedText(_previewTextDesign?.Text,
|
||||
var formattedText = new FormattedText(Text,
|
||||
System.Globalization.CultureInfo.InvariantCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
typeface,
|
||||
FontViewModel.FontSize,
|
||||
new SolidColorBrush(FontViewModel.FontColor));
|
||||
typeface,
|
||||
FontViewModel.FontSize,
|
||||
new SolidColorBrush(FontViewModel.FontColor));
|
||||
|
||||
Geometry = formattedText.BuildGeometry(new Point()).GetFlattenedPathGeometry();
|
||||
IsFinish = true;
|
||||
@@ -89,8 +119,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
this.Left = _previewTextDesign.Left + 2 + Geometry.Bounds.Left;
|
||||
this.Top = _previewTextDesign.Top + 2 + Geometry.Bounds.Top;
|
||||
this.Root?.AddItemCommand.Execute(this);
|
||||
}
|
||||
IsLoaded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void UpdateLocation()
|
||||
{
|
||||
ItemWidth = Geometry.Bounds.Width + 4;
|
||||
ItemHeight = Geometry.Bounds.Height + 4;
|
||||
Left = Points[0].X;
|
||||
Top = Points[0].Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user