/// <summary> /// Overrides <see cref="CADability.GeoObject.IGeoObjectImpl.FindSnapPoint (SnapPointFinder)"/> /// </summary> /// <param name="spf"></param> public override void FindSnapPoint(SnapPointFinder spf) { if (!spf.Accept(this)) { return; } if (spf.SnapToObjectCenter) { GeoPoint Center = new GeoPoint(StartPoint, EndPoint); spf.Check(Center, this, SnapPointFinder.DidSnapModes.DidSnapToObjectCenter); } if (spf.SnapToObjectSnapPoint) { spf.Check(StartPoint, this, SnapPointFinder.DidSnapModes.DidSnapToObjectSnapPoint); spf.Check(EndPoint, this, SnapPointFinder.DidSnapModes.DidSnapToObjectSnapPoint); } if (spf.SnapToDropPoint && spf.BasePointValid) { GeoPoint toTest = Geometry.DropPL(spf.BasePoint, startPoint, endPoint); spf.Check(toTest, this, SnapPointFinder.DidSnapModes.DidSnapToDropPoint); } if (spf.SnapToObjectPoint) { double par = PositionOf(spf.SourcePoint3D, spf.Projection.ProjectionPlane); // TODO: hier ist eigentlich gefragt der nächste punkt auf der Linie im Sinne des Projektionsstrahls if (par >= 0.0 && par <= 1.0) { spf.Check(PointAt(par), this, SnapPointFinder.DidSnapModes.DidSnapToObjectPoint); } } }
/// <summary> /// Overrides <see cref="CADability.GeoObject.IGeoObjectImpl.FindSnapPoint (SnapPointFinder)"/> /// </summary> /// <param name="spf"></param> public override void FindSnapPoint(SnapPointFinder spf) { if (!spf.Accept(this)) { return; } if (spf.SnapToObjectSnapPoint) { spf.Check(location, this, SnapPointFinder.DidSnapModes.DidSnapToObjectSnapPoint); } }