Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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));
            }
        }
Пример #3
0
        /// <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));
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
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 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);
        }
Пример #7
0
 /// <override></override>
 public override IEnumerable <ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability)
 {
     if ((controlPointCapability & ControlPointCapabilities.Reference) > 0 ||
         (controlPointCapability & ControlPointCapabilities.Rotate) > 0)
     {
         yield return(RotatePointId);
     }
 }
Пример #8
0
 /// <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);
 }
Пример #9
0
		/// <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);
			}
		}
Пример #10
0
 /// <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));
     }
 }
Пример #11
0
 /// <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));
     }
 }
Пример #12
0
        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);
        }
Пример #13
0
        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());
        }
Пример #14
0
		/// <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);
		}
Пример #15
0
 /// <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));
 }
Пример #16
0
 /// <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);
 }
Пример #17
0
		/// <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);
			}
		}
Пример #18
0
 /// <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));
     }
 }
Пример #19
0
        /// <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);
        }
Пример #20
0
        /// <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));
            }
        }
Пример #21
0
        /// <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));
            }
        }
Пример #22
0
 /// <override></override>
 public override bool HasControlPointCapability(ControlPointId controlPointId, ControlPointCapabilities controlPointCapability)
 {
     if (controlPointId == BottomCenterControlPoint && (controlPointCapability == ControlPointCapabilities.Connect))
         return false;
     else return base.HasControlPointCapability(controlPointId, controlPointCapability);
 }
Пример #23
0
		/// <override></override>
		public override IEnumerable<ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability)
		{
			if ((controlPointCapability & ControlPointCapabilities.Reference) > 0
			    || (controlPointCapability & ControlPointCapabilities.Rotate) > 0)
				yield return RotatePointId;
		}
Пример #24
0
 /// <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);
     }
 }
Пример #25
0
 /// <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;
 }
Пример #26
0
        /// <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));
            }
        }
Пример #27
0
 /// <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);
 }
Пример #28
0
 /// <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);
     }
 }
Пример #29
0
 /// <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);
 }
Пример #30
0
 /// <override></override>
 public override IEnumerable<ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability)
 {
     return base.GetControlPointIds(controlPointCapability);
 }
Пример #31
0
        /// <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;
        }
Пример #32
0
		/// <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);
			}
		}
Пример #33
0
 /// <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;
     }
 }
Пример #34
0
 /// <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;
 }
Пример #35
0
		/// <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;
		}
Пример #36
0
        /// <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));
            }
        }
Пример #37
0
 /// <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);
     }
 }
Пример #38
0
 ///// <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;
 }
Пример #39
0
        /// <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;
        }
Пример #41
0
        /// <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;
            }
        }
Пример #42
0
 /// <override></override>
 public override IEnumerable <ControlPointId> GetControlPointIds(ControlPointCapabilities controlPointCapability)
 {
     return(base.GetControlPointIds(controlPointCapability));
 }
Пример #43
0
 /// <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);
 }
Пример #44
0
 /// <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);
Пример #45
0
 /// <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;
     }
 }
Пример #46
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);
Пример #47
0
 /// <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);
 }
Пример #49
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);
 }
Пример #51
0
		/// <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);
 }
Пример #53
0
		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);
			}
		}
Пример #54
0
 /// <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;
 }
Пример #55
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);
Пример #56
0
		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);
		}
Пример #57
0
 /// <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);
Пример #58
0
		/// <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);
			}
		}
Пример #59
0
        /// <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;
 }