/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { ControlPointId result = base.HitTest(x, y, controlPointCapability, range); if (result != ControlPointId.None) { return(result); } UpdateDrawCache(); for (int i = 0; i < 3; ++i) { Point p = ControlPoints[i]; if (Geometry.DistancePointPoint(x, y, p.X, p.Y) <= range) { return(i + 1); } } if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) { if (Geometry.DistancePointPoint(X, Y, x, y) <= range) { return(RotateControlPoint); } } return(ControlPointId.None); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ArrowTipControlPoint: case BodyEndControlPoint: // ToDo: Implement GluePoint behavior for ThickArrows return((controlPointCapability & ControlPointCapabilities.Resize) != 0 //|| (controlPointCapability & ControlPointCapabilities.Glue) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); case ArrowTopControlPoint: case BodyTopControlPoint: case BodyBottomControlPoint: case ArrowBottomControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); case RotateControlPoint: return((controlPointCapability & ControlPointCapabilities.Reference) != 0 || (controlPointCapability & ControlPointCapabilities.Rotate) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftControlPoint: case TopCenterControlPoint: case TopRightControlPoint: case MiddleLeftControlPoint: case MiddleRightControlPoint: case BottomLeftControlPoint: case BottomCenterControlPoint: case BottomRightControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); case ControlPointId.Reference: case MiddleCenterControlPoint: return((controlPointCapability & ControlPointCapabilities.Reference) > 0 || (controlPointCapability & ControlPointCapabilities.Rotate) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == ControlPointId.None || controlPointId == ControlPointId.Any) { return(false); } // all control points have at least the 'none' capability. Hopefully, they might even have more... if (controlPointCapability == ControlPointCapabilities.None) { return(true); } int index = GetControlPointIndex(controlPointId); if (index > 0 && index <= InputCount + OutputCount) { return((controlPointCapability & ControlPointCapabilities.Connect) > 0 || (controlPointCapability & ControlPointCapabilities.Resize) > 0); } if (controlPointId == ControlPointId.Reference || index == 0) { return(ReferenceControlPointHasCapability(controlPointCapability)); } // default to any other control points not having any capabilities (shouldn't be any left, really) return(false); }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { ControlPointId result = base.HitTest(x, y, controlPointCapability, range); if (result != ControlPointId.None) { return(result); } UpdateDrawCache(); for (int i = 0; i < pointCount; ++i) { int j = i < 2 ? i + 1 : 0; int x1 = controlPoints[i].X + X; int y1 = controlPoints[i].Y + Y; if (Geometry.DistancePointPoint(x, y, x1, y1) <= range) { return(i + 1); } } if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) { if (Geometry.DistancePointPoint(X, Y, x, y) <= range) { return(controlPoints.Length); } } return(ControlPointId.None); }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { //if ((controlPointCapability & ControlPointCapabilities.Reference) > 0) // if (Geometry.DistancePointPoint(X, Y, x, y) <= distance) // return true; if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) { if (Geometry.DistancePointPoint(RotatePoint.X, RotatePoint.Y, x, y) <= range) { return(RotatePointId); } controlPointCapability ^= ControlPointCapabilities.Rotate; } foreach (Shape shape in ChildrenCollection) { ControlPointId pointId = shape.HitTest(x, y, controlPointCapability, range); //if (pointId != ControlPointId.None) return pointId; // All control points but the rotate point are deactivated if (pointId != ControlPointId.None) { return(ControlPointId.Reference); } } return(ControlPointId.None); }
/// <override></override> public override IEnumerable <ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability) { if ((controlPointCapability & ControlPointCapabilities.Reference) > 0 || (controlPointCapability & ControlPointCapabilities.Rotate) > 0) { yield return(RotatePointId); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == RotatePointId || controlPointId == ControlPointId.Reference) { return((controlPointCapability & ControlPointCapabilities.Rotate) > 0 || (controlPointCapability & ControlPointCapabilities.Reference) > 0); } return(false); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopCenterControlPoint: case MiddleLeftControlPoint: case MiddleRightControlPoint: case BottomCenterControlPoint: return ((controlPointCapability & ControlPointCapabilities.Resize) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == ControlPointId.Reference) { return((controlPointCapability & ControlPointCapabilities.Connect) != 0); } else { return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == GlueControlPoint) { return((controlPointCapability & ControlPointCapabilities.Glue) != 0 || (controlPointCapability & ControlPointCapabilities.Resize) != 0); } else { return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
public override IEnumerable <ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability) { List <ControlPointId> returnValue = new List <ControlPointId>(); if ((controlPointCapability & ControlPointCapabilities.Rotate) != 0) { returnValue.Add(ControlPointIds.MiddleCenter); returnValue.Add(ControlPointIds.Reference); } if ((controlPointCapability & ControlPointCapabilities.Connect) != 0) { returnValue.Add(ControlPointIds.WireMiddleCenter); } return(returnValue); }
private string GetControlPointCapabilities(ControlPointId id) { ControlPointCapabilities capabilities = ControlPointCapabilities.None; foreach (ControlPointCapabilities capability in Enum.GetValues(typeof(ControlPointCapabilities))) { if (capability == ControlPointCapabilities.All || capability == ControlPointCapabilities.None) { continue; } if (shape.HasControlPointCapability(id, capability)) { capabilities |= capability; } } return(capabilities.ToString()); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == controlPoints.Length) { return ((controlPointCapability & ControlPointCapabilities.Rotate) > 0 || (controlPointCapability & ControlPointCapabilities.Reference) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); } else if (controlPointId >= 1) { return ((controlPointCapability & ControlPointCapabilities.Resize) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); } else return base.HasControlPointCapability(controlPointId, controlPointCapability); }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapabilities, int range) { if ((controlPointCapabilities & ControlPointCapabilities.Glue) != 0 || (controlPointCapabilities & ControlPointCapabilities.Resize) != 0) { if (Geometry.DistancePointPoint(x, y, gluePointPos.X, gluePointPos.Y) <= range) { return(GlueControlPoint); } if (IsConnected(GlueControlPoint, null) == ControlPointId.None && (pinPath != null && pinPath.IsVisible(x, y))) { return(GlueControlPoint); } } return(base.HitTest(x, y, controlPointCapabilities, range)); }
/// <override></override> public override ControlPointId FindNearestControlPoint(int x, int y, int distance, ControlPointCapabilities controlPointCapability) { if ((controlPointCapability & ControlPointCapabilities.Reference) > 0) { if (Geometry.DistancePointPoint(x, y, X, Y) <= distance) { return(ControlPointId.Reference); } } else if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) { if (Geometry.DistancePointPoint(x, y, RotatePoint.X, RotatePoint.Y) <= distance) { return(RotatePointId); } } return(ControlPointId.None); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ControlPoint1: case ControlPoint2: case ControlPoint3: return ((controlPointCapability & ControlPointCapabilities.Resize) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); case RotateControlPoint: return ((controlPointCapability & ControlPointCapabilities.Rotate) > 0 || (controlPointCapability & ControlPointCapabilities.Reference) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == controlPoints.Length) { return((controlPointCapability & ControlPointCapabilities.Rotate) > 0 || (controlPointCapability & ControlPointCapabilities.Reference) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); } else if (controlPointId >= 1) { return((controlPointCapability & ControlPointCapabilities.Resize) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); } else { return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { // We count from start to end here because ControlPointId.FirstVertex and ControlPointId.Reference // refer to the same physical point. If we would process the vertices from last to first, the // hit test int j, maxIdx; maxIdx = VertexCount - 1; for (int i = maxIdx; i > 0; --i) { j = i - 1; if (Geometry.DistancePointPoint(x, y, vertices[i].X, vertices[i].Y) <= range) { ControlPointId ptId = GetControlPointId(i); if (HasControlPointCapability(ptId, controlPointCapability)) { return(ptId); } } if (Geometry.DistancePointPoint(x, y, vertices[j].X, vertices[j].Y) <= range) { ControlPointId ptId = GetControlPointId(j); if (HasControlPointCapability(ptId, controlPointCapability)) { return(ptId); } } float d = Geometry.DistancePointLine(x, y, vertices[i].X, vertices[i].Y, vertices[j].X, vertices[j].Y, true); if (d <= (LineStyle.LineWidth / 2f) + range) { if (HasControlPointCapability(ControlPointId.Reference, controlPointCapability) && !(Geometry.DistancePointPoint(x, y, vertices[0].X, vertices[0].Y) <= range) && !(Geometry.DistancePointPoint(x, y, vertices[maxIdx].X, vertices[maxIdx].Y) <= range)) { return(ControlPointId.Reference); } } } return(ControlPointId.None); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftControlPoint: case TopRightControlPoint: case BottomLeftControlPoint: case BottomRightControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) != 0); case 10: case 11: case 12: case 13: return((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId)); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ControlPoint1: case ControlPoint2: case ControlPoint3: return((controlPointCapability & ControlPointCapabilities.Resize) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); case RotateControlPoint: return((controlPointCapability & ControlPointCapabilities.Rotate) > 0 || (controlPointCapability & ControlPointCapabilities.Reference) > 0 || ((controlPointCapability & ControlPointCapabilities.Connect) > 0 && IsConnectionPointEnabled(controlPointId))); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == BottomCenterControlPoint && (controlPointCapability == ControlPointCapabilities.Connect)) return false; else return base.HasControlPointCapability(controlPointId, controlPointCapability); }
/// <override></override> public override IEnumerable<ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability) { if ((controlPointCapability & ControlPointCapabilities.Reference) > 0 || (controlPointCapability & ControlPointCapabilities.Rotate) > 0) yield return RotatePointId; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftControlPoint: case TopRightControlPoint: case BottomLeftControlPoint: case BottomRightControlPoint: return ((controlPointCapability & ControlPointCapabilities.Resize) != 0); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == MiddleCenterControlPoint) { if ((controlPointCapability & ControlPointCapabilities.Connect) != 0 || (controlPointCapability & ControlPointCapabilities.Reference) != 0 || (controlPointCapability & ControlPointCapabilities.Rotate) != 0) return true; } else if ((controlPointCapability & ControlPointCapabilities.Connect) != 0 || (controlPointCapability & ControlPointCapabilities.Resize) != 0) return IsConnectionPointEnabled(controlPointId); if ((controlPointCapability & ControlPointCapabilities.Glue) != 0) return false; return false; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftControlPoint: case TopRightControlPoint: case BottomLeftControlPoint: case BottomRightControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) != 0); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if ((controlPointCapability & ControlPointCapabilities.Connect) != 0) { return(true); } if ((controlPointCapability & ControlPointCapabilities.Glue) != 0) { // always false } if ((controlPointCapability & ControlPointCapabilities.Reference) != 0) { if (controlPointId == ControlPointId.Reference || controlPointId == 1) { return(true); } } if ((controlPointCapability & ControlPointCapabilities.Rotate) != 0) { // always false } if ((controlPointCapability & ControlPointCapabilities.Resize) != 0) { return(true); } return(false); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftControlPoint: case TopRightControlPoint: case BottomLeftControlPoint: case BottomCenterControlPoint: case BottomRightControlPoint: return (controlPointCapability != ControlPointCapabilities.Connect && base.HasControlPointCapability(controlPointId, controlPointCapability)); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == ControlPointId.Reference) return (controlPointCapability & ControlPointCapabilities.Connect) != 0; else return base.HasControlPointCapability(controlPointId, controlPointCapability); }
/// <override></override> public override IEnumerable<ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability) { return base.GetControlPointIds(controlPointCapability); }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { ControlPointId result = base.HitTest(x, y, controlPointCapability, range); if (result != ControlPointId.None) return result; UpdateDrawCache(); for (int i = 0; i < 3; ++i) { int j = i < 2 ? i + 1 : 0; int x1 = controlPoints[i].X + X; int y1 = controlPoints[i].Y + Y; if (Geometry.DistancePointPoint(x, y, x1, y1) <= range) return i + 1; } if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) if (Geometry.DistancePointPoint(X, Y, x, y) <= range) return RotateControlPoint; return ControlPointId.None; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ArrowTipControlPoint: case BodyEndControlPoint: // ToDo: Implement GluePoint behavior for ThickArrows return ((controlPointCapability & ControlPointCapabilities.Resize) != 0 //|| (controlPointCapability & ControlPointCapabilities.Glue) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); case ArrowTopControlPoint: case BodyTopControlPoint: case BodyBottomControlPoint: case ArrowBottomControlPoint: return ((controlPointCapability & ControlPointCapabilities.Resize) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); case RotateControlPoint: return ((controlPointCapability & ControlPointCapabilities.Reference) != 0 || (controlPointCapability & ControlPointCapabilities.Rotate) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftControlPoint: case TopCenterControlPoint: case TopRightControlPoint: case MiddleLeftControlPoint: case MiddleRightControlPoint: case BottomLeftControlPoint: case BottomCenterControlPoint: case BottomRightControlPoint: return (controlPointCapability & ControlPointCapabilities.Resize) != 0; case MiddleCenterControlPoint: case ControlPointId.Reference: return ((controlPointCapability & ControlPointCapabilities.Rotate) != 0 || (controlPointCapability & ControlPointCapabilities.Reference) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); default: return false; } }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { // First, check control points foreach (ControlPointId pointId in GetControlPointIds(ControlPointCapabilities.All)) { Point p = GetControlPointPosition(pointId); if (Geometry.DistancePointPoint(x, y, p.X, p.Y) <= range) if (HasControlPointCapability(pointId, controlPointCapability) && IsConnectionPointEnabled(pointId)) return pointId; } // Afterwards, check shape outline Point startPos = StartPoint; Point endPos = EndPoint; if (IsLine) { if (Geometry.DistancePointLine(x, y, startPos.X, startPos.Y, endPos.X, endPos.Y, true) <= range) { if (HasControlPointCapability(ControlPointId.Reference, controlPointCapability) && !(Geometry.DistancePointPoint(x, y, startPos.X, startPos.Y) <= range) && !(Geometry.DistancePointPoint(x, y, endPos.X, endPos.Y) <= range) && IsConnectionPointEnabled(ControlPointId.Reference)) return ControlPointId.Reference; } } else { Point radPos = RadiusPoint; float hitTestRange = (int)Math.Ceiling(LineStyle.LineWidth / 2f) + 1; if (Geometry.ArcContainsPoint(startPos.X, startPos.Y, radPos.X, radPos.Y, endPos.X, endPos.Y, Center.X, Center.Y, Radius, x, y, hitTestRange)) { if (HasControlPointCapability(ControlPointId.Reference, controlPointCapability) && !(Geometry.DistancePointPoint(x, y, startPos.X, startPos.Y) <= range) && !(Geometry.DistancePointPoint(x, y, endPos.X, endPos.Y) <= range) && IsConnectionPointEnabled(ControlPointId.Reference)) return ControlPointId.Reference; } } return ControlPointId.None; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == RotatePointId || controlPointId == ControlPointId.Reference) return ((controlPointCapability & ControlPointCapabilities.Rotate) > 0 || (controlPointCapability & ControlPointCapabilities.Reference) > 0); return false; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ControlPointIds.TopLeftControlPoint: case ControlPointIds.TopRightControlPoint: case ControlPointIds.BottomLeftControlPoint: case ControlPointIds.BottomRightControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) != 0); case CircleBase.ControlPointIds.BottomLeftConnectionPoint: case CircleBase.ControlPointIds.BottomRightConnectionPoint: case CircleBase.ControlPointIds.TopLeftConnectionPoint: case CircleBase.ControlPointIds.TopRightConnectionPoint: // Removed control point id's throw new ArgumentException("controlPointId"); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case 1: case 4: case 6: return ((controlPointCapability & ControlPointCapabilities.Resize) != 0); case 2: case 3: case 5: case 7: case 8: return ((controlPointCapability & ControlPointCapabilities.Connect) != 0 || (controlPointCapability & ControlPointCapabilities.Resize) != 0); case 9: return ((controlPointCapability & ControlPointCapabilities.Reference) != 0 || (controlPointCapability & ControlPointCapabilities.Rotate) != 0); case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: return ((controlPointCapability & ControlPointCapabilities.Connect) != 0); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
///// <summary>Overriden method. Check base class for documentation.</summary> //public override Point CalculateConnectionFoot(int x1, int y1, int x2, int y2) { // return CalculateConnectionFoot(x1, y1); //} /// <summary>Overriden method. Check base class for documentation.</summary> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { ControlPointId result = ControlPointId.None; // // We first search for a hit control point for (int cpIdx = 0; cpIdx < ControlPointCount; ++cpIdx) { // Get positions of the current control points and test on hit. LineControlPoint ctrlPoint = GetControlPoint(cpIdx); Point currPos = ctrlPoint.GetPosition(); if (Geometry.DistancePointPoint(x, y, currPos.X, currPos.Y) <= range) { if (HasControlPointCapability(ctrlPoint.Id, controlPointCapability)) result = GetControlPointId(cpIdx); break; } } if (result == ControlPointId.None) { int lineRange = (int)Math.Ceiling(LineStyle.LineWidth / 2f) + 1; Point lastKnee; int cpIdx = -1; FindNextKnee(ref cpIdx, out lastKnee); Point knee; while (FindNextKnee(ref cpIdx, out knee)) { if (Geometry.DistancePointLine(x, y, lastKnee.X, lastKnee.Y, knee.X, knee.Y, true) <= lineRange) { result = ControlPointId.Reference; break; } lastKnee = knee; } } return result; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopCenterControlPoint: case MiddleLeftControlPoint: case MiddleRightControlPoint: case BottomCenterControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) != 0 && (IsConnectionPointEnabled(controlPointId))); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); } }
public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId == ControlPointId.None || controlPointId == ControlPointId.Any) return false; // all control points have at least the 'none' capability. Hopefully, they might even have more... if (controlPointCapability == ControlPointCapabilities.None) return true; int index = GetControlPointIndex(controlPointId); if (index > 0 && index <= InputCount + OutputCount) { return ((controlPointCapability & ControlPointCapabilities.Connect) > 0 || (controlPointCapability & ControlPointCapabilities.Resize) > 0); } if (controlPointId == ControlPointId.Reference || index == 0) { return ReferenceControlPointHasCapability(controlPointCapability); } // default to any other control points not having any capabilities (shouldn't be any left, really) return false; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ControlPointId.Reference: case MiddleCenterControlPoint: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); case BottomCenterControlPoint: case TopCenterControlPoint: return((controlPointCapability & ControlPointCapabilities.Resize) != 0 || (controlPointCapability & ControlPointCapabilities.Connect) != 0); default: return(base.HasControlPointCapability(controlPointId, controlPointCapability)); //return (controlPointCapability & ControlPointCapabilities.Resize) != 0; } }
/// <override></override> public override IEnumerable <ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability) { return(base.GetControlPointIds(controlPointCapability)); }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if ((controlPointCapability & ControlPointCapabilities.Connect) != 0) { if (controlPointId == TopCenterControlPoint || controlPointId == BottomCenterControlPoint) { return(true); } } if ((controlPointCapability & ControlPointCapabilities.Glue) != 0) { // always false } if ((controlPointCapability & ControlPointCapabilities.Reference) != 0) { if (controlPointId == ControlPointId.Reference || controlPointId == MiddleCenterControlPoint) { return(true); } } if ((controlPointCapability & ControlPointCapabilities.Rotate) != 0) { if (controlPointId == MiddleCenterControlPoint) { return(true); } } if ((controlPointCapability & ControlPointCapabilities.Resize) != 0) { if (controlPointId != -1 && controlPointId != MiddleCenterControlPoint) { return(true); } } return(false); }
/// <summary> /// Lists the control points of the shape. /// </summary> /// <param name="controlPointCapability">Filters for the indicated control point capabilities. ControlPointId.None for all controll points.</param> /// <returns></returns> public abstract IEnumerable <ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability);
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ControlPointId.Reference: case MiddleCenterControlPoint: return base.HasControlPointCapability(controlPointId, controlPointCapability); case BottomCenterControlPoint: case TopCenterControlPoint: return ((controlPointCapability & ControlPointCapabilities.Resize) != 0 || (controlPointCapability & ControlPointCapabilities.Connect) != 0); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); //return (controlPointCapability & ControlPointCapabilities.Resize) != 0; } }
/// <summary> /// Tests, whether a control point has at least one of a set of given capabilities. /// </summary> /// <param name="controlPointId"></param> /// <param name="controlPointCapability"></param> public abstract bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability);
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case TopLeftConnectionPoint: case TopRightConnectionPoint: case BottomLeftConnectionPoint: case BottomRightConnectionPoint: return ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId)); default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
protected virtual bool ReferenceControlPointHasCapability(ControlPointCapabilities controlPointCapability) { return ((controlPointCapability & ControlPointCapabilities.Reference) > 0); }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { //if ((controlPointCapability & ControlPointCapabilities.Reference) > 0) // if (Geometry.DistancePointPoint(X, Y, x, y) <= distance) // return true; if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) { if (Geometry.DistancePointPoint(RotatePoint.X, RotatePoint.Y, x, y) <= range) return RotatePointId; controlPointCapability ^= ControlPointCapabilities.Rotate; } foreach (Shape shape in children) { ControlPointId pointId = shape.HitTest(x, y, controlPointCapability, range); //if (pointId != ControlPointId.None) return pointId; // All control points but the rotate point are deactivated if (pointId != ControlPointId.None) return ControlPointId.Reference; } return ControlPointId.None; }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { //if (ImageLayout == ImageLayoutMode.Original) { // if ((controlPointCapability & ControlPointCapabilities.Glue) != 0) // return false; // if ((controlPointCapability & ControlPointCapabilities.Connect) != 0 ) { // return (controlPointId != RotateControlPointId && IsConnectionPointEnabled(controlPointId)); // } // if ((controlPointCapability & ControlPointCapabilities.Reference) != 0) { // if (controlPointId == RotateControlPointId || controlPointId == ControlPointId.Reference) // return true; // } // if ((controlPointCapability & ControlPointCapabilities.Rotate) != 0) { // if (controlPointId == RotateControlPointId) // return true; // } return base.HasControlPointCapability(controlPointId, controlPointCapability); //} else return base.HasControlPointCapability(controlPointId, controlPointCapability); }
/// <override></override> public override ControlPointId FindNearestControlPoint(int x, int y, int distance, ControlPointCapabilities controlPointCapability) { if ((controlPointCapability & ControlPointCapabilities.Reference) > 0) { if (Geometry.DistancePointPoint(x, y, X, Y) <= distance) return ControlPointId.Reference; } else if ((controlPointCapability & ControlPointCapabilities.Rotate) > 0) { if (Geometry.DistancePointPoint(x, y, RotatePoint.X, RotatePoint.Y) <= distance) return RotatePointId; } return ControlPointId.None; }
/// <override></override> public override ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range) { return base.HitTest(x, y, controlPointCapability, range); }
private void SetSelectedShapeAtCursor(IDiagramPresenter diagramPresenter, int mouseX, int mouseY, int handleRadius, ControlPointCapabilities handleCapabilities) { // Find the shape under the cursor selectedShapeAtCursorInfo.Clear(); selectedShapeAtCursorInfo.Shape = diagramPresenter.SelectedShapes.FindShape(mouseX, mouseY, handleCapabilities, handleRadius, null); // If there is a shape under the cursor, find the nearest control point and caption if (!selectedShapeAtCursorInfo.IsEmpty) { ControlPointCapabilities capabilities; if (CurrentMouseState.IsKeyPressed(KeysDg.Control)) capabilities = ControlPointCapabilities.Resize /*| ControlPointCapabilities.Movable*/; else if (CurrentMouseState.IsKeyPressed(KeysDg.Shift)) capabilities = ControlPointCapabilities.Rotate; else capabilities = gripCapabilities; // Find control point at cursor that belongs to the selected shape at cursor selectedShapeAtCursorInfo.ControlPointId = selectedShapeAtCursorInfo.Shape.FindNearestControlPoint(mouseX, mouseY, diagramPresenter. ZoomedGripSize, capabilities); // Find caption at cursor (if the shape is a captioned shape) if (selectedShapeAtCursorInfo.Shape is ICaptionedShape && ((ICaptionedShape) selectedShapeAtCursorInfo.Shape).CaptionCount > 0) selectedShapeAtCursorInfo.CaptionIndex = ((ICaptionedShape) selectedShapeAtCursorInfo.Shape).FindCaptionFromPoint(mouseX, mouseY); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointId <= base.ControlPointCount) { switch (controlPointId) { case TopLeftControlPoint: case TopRightControlPoint: case MiddleLeftControlPoint: case MiddleRightControlPoint: case BottomLeftControlPoint: case BottomRightControlPoint: return (controlPointCapability & ControlPointCapabilities.Resize) != 0; case TopCenterControlPoint: case BottomCenterControlPoint: return ((controlPointCapability & ControlPointCapabilities.Resize) != 0 || (controlPointCapability & ControlPointCapabilities.Connect) != 0); case MiddleCenterControlPoint: return (controlPointCapability & ControlPointCapabilities.Rotate) != 0; default: return base.HasControlPointCapability(controlPointId, controlPointCapability); } } else return (controlPointCapability & ControlPointCapabilities.Connect) != 0; }
/// <summary> /// Determines if the given point is inside the shape or near a control point having one of the /// given control point capabilities. /// </summary> /// <returns>Control point id of hit control point, ControlPointId.Reference if shape is hit, /// ControlPointId.None if nothing is hit.</returns> public abstract ControlPointId HitTest(int x, int y, ControlPointCapabilities controlPointCapability, int range);
public IEnumerable<Shape> FindShapesSortedByZOrder(IDiagramPresenter diagramPresenter, int x, int y, ControlPointCapabilities pointCapabilities, int distance) { return FindVisibleShapes(diagramPresenter, x, y, pointCapabilities, distance).OrderByDescending(s => s.ZOrder); }
/// <summary> /// Finds the control point, with the least distance to the given coordinates. /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="distance"></param> /// <param name="controlPointCapability"></param> public abstract ControlPointId FindNearestControlPoint(int x, int y, int distance, ControlPointCapabilities controlPointCapability);
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { switch (controlPointId) { case ControlPointId.Reference: case RotatePointControlPoint: return ((controlPointCapability & ControlPointCapabilities.Reference) != 0 || (controlPointCapability & ControlPointCapabilities.Rotate) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); default: if (controlPointId > 0 && controlPointId < RotatePointControlPoint) return ((controlPointCapability & ControlPointCapabilities.Resize) != 0 || ((controlPointCapability & ControlPointCapabilities.Connect) != 0 && IsConnectionPointEnabled(controlPointId))); else return base.HasControlPointCapability(controlPointId, controlPointCapability); } }
/// <override></override> public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability) { if (controlPointCapability == ControlPointCapabilities.Connect && !IsConnectionPointEnabled(controlPointId)) { return(false); } if (base.HasControlPointCapability(controlPointId, controlPointCapability)) { return(true); } //// Check special values (done by base class) //if (controlPointId == ControlPointId.Reference) // return ((controlPointCapability & ControlPointCapabilities.Reference) != 0 // || (controlPointCapability & ControlPointCapabilities.Resize) != 0 // || (controlPointCapability & ControlPointCapabilities.Connect) != 0); //if (controlPointId == ControlPointId.None || controlPointId == ControlPointId.Any) // return base.HasControlPointCapability(controlPointId, controlPointCapability); // Check 'real' points int controlPointIndex = GetControlPointIndex(controlPointId); if (controlPointIndex == 0) { return((controlPointCapability & ControlPointCapabilities.Glue) != 0 || (controlPointCapability & ControlPointCapabilities.Reference) != 0 || (controlPointCapability & ControlPointCapabilities.Resize) != 0); } else if (controlPointIndex == VertexCount - 1) { return((controlPointCapability & ControlPointCapabilities.Glue) != 0 || (controlPointCapability & ControlPointCapabilities.Resize) != 0); } else { return((controlPointCapability & ControlPointCapabilities.Connect) != 0 || (controlPointCapability & ControlPointCapabilities.Resize) != 0); } }
protected override bool ReferenceControlPointHasCapability(ControlPointCapabilities controlPointCapability) { return (controlPointCapability & ControlPointCapabilities.Reference) > 0 || (controlPointCapability & ControlPointCapabilities.Connect) > 0; }