From 4531e0526a92aacd57c67b89fd8710d8bb6edccc Mon Sep 17 00:00:00 2001 From: Tim Young Date: Wed, 28 Feb 2018 10:14:23 -0600 Subject: [PATCH] Able to resize existing shapes --- EduNetworkBuilder/NetShape.cs | 4 ++-- EduNetworkBuilder/Network.cs | 29 ++++++++++++++++++++++++ EduNetworkBuilder/NetworkBuilder.cs | 34 ++++++++++++++++++++++++++++- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/EduNetworkBuilder/NetShape.cs b/EduNetworkBuilder/NetShape.cs index 8b853ce..cfa93eb 100644 --- a/EduNetworkBuilder/NetShape.cs +++ b/EduNetworkBuilder/NetShape.cs @@ -105,9 +105,9 @@ namespace EduNetworkBuilder int fY = ClickPoint.Y; int halfWidth = InArea.Width / 2; int halfHeight = InArea.Height / 2; - if (ClickPoint.X < InArea.X + halfWidth) fX = InArea.X; + if (ClickPoint.X > InArea.X + halfWidth) fX = InArea.X; else fX = InArea.X + InArea.Width; - if (ClickPoint.Y < InArea.Y + halfHeight) fY = InArea.Y; + if (ClickPoint.Y > InArea.Y + halfHeight) fY = InArea.Y; else fY = InArea.Y + InArea.Height; return new Point(fX, fY); diff --git a/EduNetworkBuilder/Network.cs b/EduNetworkBuilder/Network.cs index 14a452b..10ab1c3 100644 --- a/EduNetworkBuilder/Network.cs +++ b/EduNetworkBuilder/Network.cs @@ -485,6 +485,25 @@ namespace EduNetworkBuilder return Dest; } + /// + /// this is a reverse of clickedPos. Translate an image x/y to a picturebox location + /// + /// The location on the backgroundimage + /// + public Point PictureBoxPoint(Point ImageLocation) + { + if (myPBox == null) return new Point(-1, -1); + double deltaX = (double)TheNetImage.Width / myPBox.Width; + double deltaY = (double)TheNetImage.Height / myPBox.Height; + Point Dest = new Point((int)(ImageLocation.X / deltaX), (int)(ImageLocation.Y / deltaY)); + if (Dest.X > TheNetImage.Width) Dest = new Point(TheNetImage.Width, Dest.Y); + if (Dest.Y > TheNetImage.Height) Dest = new Point(Dest.X, TheNetImage.Height); + if (Dest.X < 0) Dest = new Point(0, Dest.Y); + if (Dest.Y < 0) Dest = new Point(Dest.X, 0); + + return Dest; + } + public Point clickedPosCentered(Point pixelClickedOn) { Point NetPoint = clickedPos(pixelClickedOn); @@ -1120,6 +1139,16 @@ namespace EduNetworkBuilder Shapes.Add(what); } + public NetShape ShapeAtPoint(Point location) + { + foreach(NetShape shape in Shapes) + { + if (shape.CornersAreClickedOn(location)) + return shape; + } + return null; + } + void KillAllExtraWindows(bool EvenRTF=false) { for(int i = Application.OpenForms.Count -1; i >=0; i--) diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs index b1105ee..50fcb21 100644 --- a/EduNetworkBuilder/NetworkBuilder.cs +++ b/EduNetworkBuilder/NetworkBuilder.cs @@ -54,6 +54,7 @@ namespace EduNetworkBuilder private Point OrigClickPoint = new Point(-1, -1); private NetShapeType CurrentShape = NetShapeType.none; + private NetShape ShapeForEditing = null; private string InitialFileLoad = ""; @@ -1505,10 +1506,22 @@ namespace EduNetworkBuilder Color LineColor = Color.FromName(lColor); if (LineColor.Name != "Empty" || FillColor.Name != "Empty") { + if (ShapeForEditing == null) + { NetShape NS = new NetShape(CurrentShape, selectbox, FillColor, LineColor); myNetwork.AddShape(NS); UpdateForm(); + } + else + { + ShapeForEditing.MyShape = CurrentShape; + ShapeForEditing.InArea = selectbox; + ShapeForEditing.FillColor = FillColor; + ShapeForEditing.LineColor = LineColor; + UpdateForm(); + + } } } catch @@ -1638,7 +1651,26 @@ namespace EduNetworkBuilder OrigClickPoint = myNetwork.clickedPosCentered(e.Location); ClickedImageLocation = e.Location; //See if we have clicked on something - ItemClickedOn = myNetwork.ItemAtPosition(location); + if (!myNetwork.InShapeEditMode) + { + ItemClickedOn = myNetwork.ItemAtPosition(location); + ShapeForEditing = null; + } + else + { + ItemClickedOn = null; + ShapeForEditing = myNetwork.ShapeAtPoint(location); + if(ShapeForEditing != null) + { + //we set the drag-point for the opposite corner + ClickedLocation = ShapeForEditing.OppositePoint(location); + ClickedImageLocation = myNetwork.PictureBoxPoint(ClickedLocation); + CurrentShape = ShapeForEditing.MyShape; + cbFillColor.Text = ShapeForEditing.FillColor.Name; + cbLineColor.Text = ShapeForEditing.LineColor.Name; + btnUpdateShape(); //Change the shape to what we are editing + } + } if(e.Button == MouseButtons.Left) MouseIsDown = true; LastMouseDown = DateTime.UtcNow;