/// <summary> /// Overrides <see cref="CADability.Actions.ConstructAction.OnDone ()"/> /// </summary> public override void OnDone() { succeeded = true; if (geoPointProperty != null) { geoPointProperty.ModifiedByAction(this); } base.OnDone(); }
/// <summary> /// Implements <see cref="Action.OnMouseUp"/>. If you override this method /// don't forget to call the bas implementation. /// </summary> /// <param name="e"><paramref name="Action.OnMouseUp.e"/></param> /// <param name="vw"><paramref name="Action.OnMouseUp.vw"/></param> public override void OnMouseUp(MouseEventArgs e, IView vw) { using (Frame.Project.Undo.ContextFrame(this)) { SnapPointFinder.DidSnapModes DidSnap; GeoPoint p = base.SnapPoint(e, basePoint, vw, out DidSnap); if (DidSnap == SnapPointFinder.DidSnapModes.DidNotSnap) { // der Punkt wurde also nicht gefangen, befindet sich somit in der Zeichenebene // da diese Aktion aber bei Hotspots drankommt, soll aber statt der Zeichenebene die zur Zeichenebene // parallele Ebene durch den basePoint (den Ausgangspunkt) genommen werden Plane parallel = GetMousePlane(vw); // new Plane(basePoint, vw.Projection.DrawingPlane.DirectionX, vw.Projection.DrawingPlane.DirectionY); p = parallel.ToGlobal(parallel.Project(p)); // die Berechnung ist umständlich, man bräuchte nur den Offsetvektor einmal berechnen } SetGeoPoint(p); } Frame.Project.Undo.ClearContext(); // also die nächsten Änderungen sind ein neuer undo Schritt if (GeoPointProperty != null) { GeoPointProperty.ModifiedByAction(this); } base.RemoveThisAction(); }