/// <summary> /// Implements <see cref="Action.OnMouseMove"/>. If you override this method /// don't forget to call the bas implementation. /// </summary> /// <param name="e"><paramref name="Action.OnMouseMove.e"/></param> /// <param name="vw"><paramref name="Action.OnMouseMove.vw"/></param> public override void OnMouseMove(MouseEventArgs e, IView vw) { using (Frame.Project.Undo.ContextFrame(this)) { SnapPointFinder.DidSnapModes DidSnap; GeoPoint p = base.SnapPoint(e, fixPoint, vw, out DidSnap); // hier möglicherweise einige Fangmethoden ausschalten // der fixPoint und der aktuelle Punkt werden in die aktuelle Zeichenebene projiziert if (CalculateAngleEvent != null) { SetAngle(new Angle(CalculateAngleEvent(p))); } else { if (usesLocalPlane) { GeoPoint2D pp = localPlane.Project(p); SetAngle(new Angle(pp, GeoPoint2D.Origin)); } else { GeoPoint2D pp = ActiveDrawingPlane.Project(p); GeoPoint2D pfixpoint = ActiveDrawingPlane.Project(fixPoint); SetAngle(new Angle(pp, pfixpoint)); } } } }
private void Recalc() { if (firstPointIsValid && secondPointIsValid) { Angle a = new Angle(ActiveDrawingPlane.Project(secondPoint - firstPoint)); using (Frame.Project.Undo.ContextFrame(this)) { angleProperty.SetAngle(a); } } }
private void OnSetEndPoint(GeoPoint p) { endPoint = p; if (startPointInput.Fixed) { rotAngleInput.Fixed = true; // damit die Aktion nach dem Endpunkt aufhört SweepAngle swAngle = new SweepAngle((GeoVector2D)(base.ActiveDrawingPlane.Project(startPoint) - base.ActiveDrawingPlane.Project(refPoint)), base.ActiveDrawingPlane.Project(endPoint) - base.ActiveDrawingPlane.Project(refPoint)); ModOp m = ModOp.Rotate(base.BasePoint, axisVector, new SweepAngle(swAngle - rotationAngle) + GetOffset()); rotationAngle = swAngle.Radian; block.Modify(m); feedBackEllipse.SetArcPlaneCenterStartEndPoint(ActiveDrawingPlane, ActiveDrawingPlane.Project(BasePoint), ActiveDrawingPlane.Project(startPoint), ActiveDrawingPlane.Project(endPoint), ActiveDrawingPlane, swAngle.Radian > 0.0); } }