/// <summary> /// 現在の座標を指定されたいテムを指定した角度回転した値にセット。 /// </summary> /// <param name="item0"></param> /// <param name="partIndex"></param> /// <param name="center"></param> /// <param name="da"></param> internal void ApplyOtherValue2(SvgPathItem item0, int partIndex, Vector2 center, float da) { switch (Command) { case 'C': case 'c': { if (item0.IsC()) { if (partIndex == 2 || partIndex == 1) { Vector2 p = item0.GetPoint(); Vector2 ps = GetPoint(); p = CalcRotatePosition(p, center, da); points[2] = p; // コントロールポイント2も同様に、 var cp2 = item0.GetControlPoint(true); cp2 = CalcRotatePosition(cp2, center, da); points[1] = cp2; // 隣のコントロールポイント1も同様に var nexti = FindNext(); if (nexti.IsC()) { nexti.ControlRotate(0, center, ps, p); } } else if (partIndex == 0) { /* * SvgPathItem item = item0.FindBefor(); * Vector2 p = item.GetPoint(); * * p = CalcRotatePosition(p, center, da); * var itemb = FindBefor(); * itemb.SetPoint(p); * * // コントロールポイント * var cp1 = item0.GetControlPoint(false); * cp1 = CalcRotatePosition(p, center, da); * points[0] = cp1; */ var p = item0.GetControlPoint(false); p = CalcRotatePosition(p, center, da); points[0] = p; } } break; } case 'M': case 'l': case 'L': { Vector2 p = item0.GetPoint(); p = CalcRotatePosition(p, center, da); points[0] = p; break; } } }
internal void AdjustSymmetric(SvgPathItem item) { if (!IsC() || !item.IsC()) { return; } var c = item.GetControlPoint(true); var p = item.GetPoint(); c.X = p.X + (p.X - c.X); c.Y = p.Y + (p.Y - c.Y); points[0] = c; }