protected override void AfterPathTransformed(PathTransformType transformType, bool refleshPath) { if (!IsInCreating) { UpdateVertexAnchors(); } base.AfterPathTransformed(transformType, refleshPath); }
protected virtual void AfterPathTransformed(PathTransformType transformType, bool refleshPath) { if (refleshPath) { RefleshContainer(); } if (!IsInCreating) { RecalculateDraggableHotSpots(); } }
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); }
/// <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; }
/// <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; }
/// <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; }