示例#1
0
 protected override void AfterPathTransformed(PathTransformType transformType, bool refleshPath)
 {
     if (!IsInCreating)
     {
         UpdateVertexAnchors();
     }
     base.AfterPathTransformed(transformType, refleshPath);
 }
示例#2
0
        protected virtual void AfterPathTransformed(PathTransformType transformType, bool refleshPath)
        {
            if (refleshPath)
            {
                RefleshContainer();
            }

            if (!IsInCreating)
            {
                RecalculateDraggableHotSpots();
            }
        }
示例#3
0
        protected override void AfterPathTransformed(PathTransformType transformType, bool refleshPath)
        {
            // Console.WriteLine("rectshape AfterPathTransformed  ");

            if (!IsInCreating)
            {
                ResetPathExtraInfo(transformType);
                if (transformType == PathTransformType.Scale)
                {
                    ResetHotSpotsVisibility();
                }
            }
            base.AfterPathTransformed(transformType, refleshPath);
        }
示例#4
0
        /// <summary>
        /// reset center point, rotate point, corner/side anchors, top/right side angle
        /// </summary>
        protected override void ResetPathExtraInfo(PathTransformType transType)
        {
            PointF[] pf     = base.Path.PathPoints;
            PointF[] corner = new PointF[4];
            PointF[] side   = new PointF[4];

            base.CenterPoint = new PointF((pf[6].X + pf[0].X) / 2, (pf[9].Y + pf[3].Y) / 2);

            side[0] = pf[9];
            side[1] = pf[0];
            side[2] = pf[3];
            side[3] = pf[6];

            float rdx = pf[0].X - CenterPoint.X;
            float rdy = pf[0].Y - CenterPoint.Y;
            float ldx = pf[6].X - CenterPoint.X;
            float ldy = pf[6].Y - CenterPoint.Y;

            corner[0] = new PointF(pf[9].X + ldx, pf[9].Y + ldy);
            corner[1] = new PointF(pf[9].X + rdx, pf[9].Y + rdy);
            corner[2] = new PointF(pf[3].X + rdx, pf[3].Y + rdy);
            corner[3] = new PointF(pf[3].X + ldx, pf[3].Y + ldy);

            CornerAnchors = corner;
            SideAnchors   = side;

            if (transType == PathTransformType.Rotate || transType == PathTransformType.Scale)
            {
                double tmp = Math.Atan2(pf[0].Y - pf[6].Y, pf[0].X - pf[6].X);
                if (tmp != 0)
                {
                    RightSideAngle = tmp;
                }
                tmp = Math.Atan2(pf[9].Y - pf[3].Y, pf[9].X - pf[3].X);
                if (tmp != 0)
                {
                    TopSideAngle = tmp;
                }
            }

            double angle       = TopSideAngle + Math.PI;
            PointF rotatePoint = new PointF(
                (float)(pf[3].X + EPConst.RotatingRect_Offset * Math.Cos(angle)),
                (float)(pf[3].Y + EPConst.RotatingRect_Offset * Math.Sin(angle)));

            base.RotateLocation = rotatePoint;
        }
示例#5
0
        /// <summary>
        /// reset center point, rotate point, corner/side anchors, top/right side angle
        /// </summary>
        protected override void ResetPathExtraInfo(PathTransformType transType)
        {
            PointF[] pf     = base.Path.PathPoints;
            PointF[] corner = new PointF[4];
            PointF[] side   = new PointF[4];

            if (transType == PathTransformType.Rotate)
            {
                RightSideAngle = Math.Atan2(pf[4].Y - pf[3].Y, pf[4].X - pf[3].X);
            }

            corner[0] = new PointF(
                pf[3].X + (float)(_pro.RadiusTL * Math.Cos(RightSideAngle + Math.PI)),
                pf[3].Y + (float)(_pro.RadiusTL * Math.Sin(RightSideAngle + Math.PI)));

            corner[1] = new PointF(
                pf[4].X + (float)(_pro.RadiusTR * Math.Cos(RightSideAngle)),
                pf[4].Y + (float)(_pro.RadiusTR * Math.Sin(RightSideAngle)));

            corner[2] = new PointF(
                pf[11].X + (float)(_pro.RadiusBR * Math.Cos(RightSideAngle)),
                pf[11].Y + (float)(_pro.RadiusBR * Math.Sin(RightSideAngle)));

            corner[3] = new PointF(
                pf[12].X + (float)(_pro.RadiusBL * Math.Cos(RightSideAngle + Math.PI)),
                pf[12].Y + (float)(_pro.RadiusBL * Math.Sin(RightSideAngle + Math.PI)));

            side[0] = new PointF((corner[0].X + corner[1].X) / 2, (corner[0].Y + corner[1].Y) / 2);
            side[1] = new PointF((corner[2].X + corner[1].X) / 2, (corner[2].Y + corner[1].Y) / 2);
            side[2] = new PointF((corner[2].X + corner[3].X) / 2, (corner[2].Y + corner[3].Y) / 2);
            side[3] = new PointF((corner[0].X + corner[3].X) / 2, (corner[0].Y + corner[3].Y) / 2);

            double angle       = RightSideAngle + Math.PI / 2;
            PointF rotatePoint = new PointF(
                (float)(side[2].X + EPConst.RotatingRect_Offset * Math.Cos(angle)),
                (float)(side[2].Y + EPConst.RotatingRect_Offset * Math.Sin(angle)));

            base.RotateLocation = rotatePoint;
            base.CenterPoint    = new PointF((side[3].X + side[1].X) / 2, (side[0].Y + side[2].Y) / 2);
            CornerAnchors       = corner;
            SideAnchors         = side;
        }
示例#6
0
        /// <summary>
        /// reset center point, rotate point, corner/side anchors, top/right side angle
        /// </summary>
        protected virtual void ResetPathExtraInfo(PathTransformType transType)
        {
            // Console.WriteLine("ResetPathExtraInfo");
            PointF[] pf   = base.Path.PathPoints;
            PointF[] side = new PointF[4];
            base.CenterPoint = new PointF((pf[0].X + pf[2].X) / 2, (pf[1].Y + pf[3].Y) / 2);

            side[0] = new PointF((pf[0].X + pf[1].X) / 2, (pf[0].Y + pf[1].Y) / 2);
            side[1] = new PointF((pf[1].X + pf[2].X) / 2, (pf[1].Y + pf[2].Y) / 2);
            side[2] = new PointF((pf[2].X + pf[3].X) / 2, (pf[2].Y + pf[3].Y) / 2);
            side[3] = new PointF((pf[3].X + pf[0].X) / 2, (pf[3].Y + pf[0].Y) / 2);

            if (transType == PathTransformType.Rotate || transType == PathTransformType.Scale)
            {
                double tmp = Math.Atan2(pf[1].Y - pf[0].Y, pf[1].X - pf[0].X);
                if (tmp != 0)
                {
                    RightSideAngle = tmp;
                }
                tmp = Math.Atan2(pf[0].Y - pf[3].Y, pf[0].X - pf[3].X);
                if (tmp != 0)
                {
                    TopSideAngle = tmp;
                }
            }

            double angle       = TopSideAngle + Math.PI;
            PointF bottomM     = new PointF((pf[2].X + pf[3].X) / 2, (pf[2].Y + pf[3].Y) / 2);
            PointF rotatePoint = new PointF();

            rotatePoint.X = (float)(bottomM.X + EPConst.RotatingRect_Offset * Math.Cos(angle));
            rotatePoint.Y = (float)(bottomM.Y + EPConst.RotatingRect_Offset * Math.Sin(angle));

            base.RotateLocation = rotatePoint;
            CornerAnchors       = pf;
            SideAnchors         = side;
        }