using FlowChartModule.绘制模块;
using Prism.Ioc;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static System.Formats.Asn1.AsnWriter;
namespace FlowChartModule.Views
{
///
/// ModuleView.xaml 的交互逻辑
///
public partial class ModuleView : UserControl
{
public Element _element;
public DrawModule drawModule;
double scale=1;
private Point _mousedownPoint;
private bool _isMouseDown=false;
public ModuleView(IContainerProvider containerProvider)
{
InitializeComponent();
drawModule=containerProvider.Resolve();
drawModule.Canvas = this.DrawingContainer;
this.MouseUp += ModuleView_MouseUp;
//Pantransform.X = -10000;
//Pantransform.Y = -10000;
}
private void ModuleView_MouseUp(object sender, MouseButtonEventArgs e)
{
ParentCanvasGrid.ReleaseMouseCapture();
Connection_Point._isMouseDown = false;
_isMouseDown = false;
drawModule.DrawRectangle(e.GetPosition(this.DrawingContainer));
if ( drawModule.CurrentFlowClickElement != null )
{
drawModule.CurrentFlowClickElement.connection_Lines.Remove(drawModule.Connection_Line);
DrawingContainer.Children.Remove(drawModule.Connection_Line.path);
}
drawModule.CurrentFlowClickElement = null;
drawModule.isMouseDown = false;
//drawModule.Connection_Line
}
private void Window_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if ( Keyboard.IsKeyDown(Key.LeftCtrl) )
{
if ( e.Delta < 0 )
{
scale -= 0.01;
}
else
{
scale += 0.01;
}
// scale += (double)e.Delta / 35000;
ScaleTransform transfrom = new ScaleTransform();
transfrom.ScaleX = transfrom.ScaleY = scale;
this.DrawingContainer.RenderTransform = transfrom;
}
}
private Pen CreateAndFreezePen()
{
// 创建Pen
Pen pen = new Pen(Brushes.Black, 1);
// 冻结Pen
if ( pen.CanFreeze )
{
pen.Freeze();
}
return pen;
}
private void ParentCanvasGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!drawModule.isMouseDown)
{
_isMouseDown = true;
_mousedownPoint = e.GetPosition(this.ParentCanvasGrid);
ParentCanvasGrid.CaptureMouse();
}
if ( drawModule.CurrentFlowClickElement != null && Connection_Point._isMouseDown )
{
drawModule.Connection_Line= new Connection_Line(DrawingContainer);
Point position;
Point position1 = drawModule.CurrentFlowClickElement.left.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0));
Point position2 = drawModule.CurrentFlowClickElement.right.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0));
Point position3 = drawModule.CurrentFlowClickElement.up.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0));
Point position4 = drawModule.CurrentFlowClickElement.down.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0));
Point position5= e.GetPosition(this.DrawingContainer);
bool isHas = false;
if ( Math.Abs(position1.X - position5.X) < 40 && Math.Abs(position1.Y - position5.Y) < 40 && !isHas )
{
isHas = true;
position =new Point(position1.X+6,position1.Y+6);
}
if ( Math.Abs(position2.X - position5.X) < 40 && Math.Abs(position2.Y - position5.Y) < 40 && !isHas )
{
isHas = true;
position = new Point(position2.X + 6, position2.Y + 6);
}
if ( Math.Abs(position3.X - position5.X) < 40 && Math.Abs(position3.Y - position5.Y) < 40 && !isHas )
{
isHas = true;
position = new Point(position3.X + 6, position3.Y + 6);
}
if ( Math.Abs(position4.X - position5.X) < 40 && Math.Abs(position4.Y - position5.Y) < 40 && !isHas )
{
isHas = true;
position = new Point(position4.X + 6, position4.Y + 6);
}
if ( isHas ) {
drawModule.Connection_Line.curveModel.StartPoint = position;
drawModule.Connection_Line.curveModel.EndPoint = position;
drawModule.Connection_Line.Drewbezier(this.DrawingContainer);
drawModule.Connection_Line.Startelement = drawModule.CurrentFlowClickElement;
drawModule.CurrentFlowClickElement.connection_Lines.Add(drawModule.Connection_Line);
}
}
}
private void ParentCanvasGrid_MouseMove(object sender, MouseEventArgs e)
{
if (_isMouseDown)
{
Point point=e.GetPosition(ParentCanvasGrid);
Pantransform.X -= _mousedownPoint.X - point.X;
Pantransform.Y -= _mousedownPoint.Y - point.Y;
_mousedownPoint = point;
}
if ( drawModule.CurrentFlowClickElement != null &&Connection_Point._isMouseDown)
{
drawModule.Connection_Line.curveModel.EndPoint = e.GetPosition(this.DrawingContainer);
drawModule.Connection_Line.DrewbezierRef(this.DrawingContainer);
}
}
}
}