void Subject_ChangedForm(IShape subject, ChangeFormState state) { if (isAttracted || dragged != subject || !state.HasFlag(ChangeFormState.Coords)) return; using (StartFinishAction.Create(() => isAttracted = true, () => isAttracted = false)) { RectangleF rect = subject.Rectangle; PointF center = subject.GetCenter(), minDist = new PointF(10, 10), dist = new PointF(); guidlines = subject.GetCenter(); hit = 0; bool lHit = false; foreach (var guide in guides.Where(s => s != subject).Select(s => s.GetCenter())) { if ((dist.X = Math.Abs(center.X - guide.X)) < minDist.X) { minDist.X = dist.X; guidlines.X = guide.X; hit |= 1; } if ((dist.Y = Math.Abs(center.Y - guide.Y)) < minDist.Y) { minDist.Y = dist.Y; guidlines.Y = guide.Y; hit |= 2; } if (hit == 3) break; //if (hit = Math.Abs(rect.Left - guide.X) <= 10) // subject.Left = guide.X; //if (hit |= Math.Abs(rect.Top - guide.Y) <= 10) // subject.Top = guide.Y; //if (hit) break; } subject.ToCenterPoint(guidlines); } }
void marker_ChangedForm(IShape obj, ChangeFormState state = ChangeFormState.All) { if (!isMarkerChangedForm && state.HasFlag(ChangeFormState.Coords)) using (StartFinishAction.Create(() => isMarkerChangedForm = true, () => isMarkerChangedForm = false)) { var ind = Markers.IndexOf((ReactiveShape<Circle>)obj); Filler.Shape[ind] = obj.GetCenter(); obj.ToCenterPoint(Filler.Shape[ind]); //Caption.Shape.String = Filler.Shape.Area.ToString("R"); FitchInfoPics(); } //Caption.ToCenterPoint(Filler.GetCenter()); }