/// <summary> /// 位置変更メイン /// </summary> /// <param name="polygonUnit"></param> /// <param name="partIndex"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="da"></param> /// <param name="dr"></param> /// <param name="center"></param> /// <returns></returns> internal bool PointChange(MainPage.PolygonUnit polygonUnit, int partIndex, float dx, float dy, float da, float dr, Vector2 center) { int unit = (int)polygonUnit; bool rot = true; if (dx != 0 || dy != 0) { rot = false; } if (rot) { if (IsC() && partIndex != 2) { if (partIndex == 1) { center = points[2]; } else { center = befor.GetPoint(); // C の場合最低前にMが存在。 } } ValueRotate(partIndex, center, da, dr); } else { // 移動 ValueChange(partIndex, dx, dy); } //---------------------------------------------------------- if (polygonUnit == MainPage.PolygonUnit.Symmetry) { } else if (unit > 0 && polygonUnit != MainPage.PolygonUnit.RulerOrigin) { if (IsC() && partIndex != 2) { var v = CalcCenter(); if (v == null) { return(false); } center = v.Value; } SvgPathItem last = null; var top = FindTop(); int count = PathCount(ref last); var item = this; for (int cx = 1; cx < count / unit; cx++) { for (int ix = 0; ix < unit; ix++) { item = item.FindNext(true); } if (item == this) { break; } item.ApplyOtherValue2(this, partIndex, center, (360.0f / count * unit) * cx); } } return(true); }
internal string GetInfo(MainPage.PolygonUnit polygonUnitValue) { if (CurrentIndex.IsValid()) { var m_path = Paths[CurrentIndex.BlockIndex]; if (polygonUnitValue == PolygonUnit.Symmetry) { if (CurrentIndex.BlockIndex == Paths.Count - 1) { Vector2 start = m_path[0].GetPoint(); Vector2 end = m_path[1].GetPoint(); var v1 = end - start; var a1 = MathF.Atan2(v1.Y, v1.X); string text = string.Format("始点({0:0.00},{1:0.00}) 終点({2:0.00},{3:0.00}) 角度({4:0.0}) ", start.X, start.Y, end.X, end.Y, CmUtils.ToAngle(a1)); return(text); } else { Vector2 start = new Vector2(); Vector2 end = new Vector2(); var item = m_path[CurrentIndex.ItemIndex]; var p = item.GetPoint(CurrentIndex.PartIndex); if (RulerEnabled) { var ruler = Paths[Paths.Count - 1]; start = ruler[0].GetPoint(); end = ruler[1].GetPoint(); } else { CalcReferenceLine(ref start, ref end); } /* * */ var v1 = end - start; var a1 = MathF.Atan2(v1.Y, v1.X); var v2 = p - start; var a2 = MathF.Atan2(v2.Y, v2.X); var l = MathF.Abs(MathF.Sin(a2 - a1) * MathF.Sqrt(MathF.Pow(v2.X, 2) + MathF.Pow(v2.Y, 2))); var l2 = MathF.Cos(a2 - a1) * MathF.Sqrt(MathF.Pow(v2.X, 2) + MathF.Pow(v2.Y, 2)); string text = string.Format("基準から:{1:0.0} 中心線から:{0:0.0} $$ ", l, l2); string info = item.GetInfo(CurrentIndex.PartIndex, true); return(text + info); } } else if (polygonUnitValue == PolygonUnit.RulerOrigin) { if (RulerVisible) { var ruler = Paths[Paths.Count - 1]; var v = ruler[0].GetPoint(); var item = m_path[CurrentIndex.ItemIndex]; string info = item.GetInfo(CurrentIndex.PartIndex, true); string text = string.Format("原点:{0:0.0} {1:0.0}", v.X, v.Y); var p = item.GetPoint(); var ofy = p.Y - v.Y; var ofx = p.X - v.X; float r = MathF.Sqrt(MathF.Pow(ofx, 2) + MathF.Pow(ofy, 2)); var a = MathF.Atan2(ofy, ofx); text += string.Format(" 半径 {0:0.00} 角度 {1:0.00}", r, ToAngle(a)); return(text + info); } } else if (polygonUnitValue != MainPage.PolygonUnit.none) { int unit = (int)polygonUnitValue; var count = m_path.Count - 1; if (IsSameLast(m_path)) { count--; } if (count >= unit * 2 && count % 2 == 0) { var PolygonCenter = CalcCenter(m_path); string text = string.Format("中心:{0:0.0} {1:0.0}", PolygonCenter.X, PolygonCenter.Y); var index = CurrentIndex.ItemIndex;// if (index >= 0) { var item = m_path[index]; var p = item.GetPoint(); var v = PolygonCenter; var ofy = p.Y - v.Y; var ofx = p.X - v.X; float r = MathF.Sqrt(MathF.Pow(ofx, 2) + MathF.Pow(ofy, 2)); var a = MathF.Atan2(ofy, ofx); text += string.Format(" 半径 {0:0.00} 角度 {1:0.00}", r, ToAngle(a)); var partIndex = CurrentIndex.PartIndex; // string info = item.GetInfo(partIndex, true); text += info; } return(text); } } { var index = CurrentIndex.ItemIndex; // var partIndex = CurrentIndex.PartIndex; // if (index >= 0) { var item = m_path[index]; string info = item.GetInfo(partIndex); return(info); } } } return("選択されていません"); }