private bool showLine() { ArrayList usableCurves = new ArrayList(); // lokales Array, das die gültigen Kurven sammelt double mindist = double.MaxValue; for (int i = 0; i < tangCurves.Length; ++i) { Plane pl; double lineAngle; if (Curves.GetCommonPlane(objectPoint, tangCurves[i], out pl)) { ICurve2D l2D = tangCurves[i].GetProjectedCurve(pl); if (l2D is Path2D) { (l2D as Path2D).Flatten(); } lineAngle = pl.Project(lineDir).Angle; // 2D-Winkel aus der Richtung erzeugen GeoPoint2D[] tangentPoints = l2D.TangentPointsToAngle(lineAngle, pl.Project(objectPoint)); if (tangentPoints.Length > 0) { // eine gültige Kurve ist gefunden usableCurves.Add(tangCurves[i]); for (int j = 0; j < tangentPoints.Length; ++j) { double dist = Geometry.Dist(tangentPoints[j], pl.Project(objectPoint)); if (dist < mindist) { mindist = dist; selected = usableCurves.Count - 1; // merken, welche Kurve die aktuell benutzte ist startPoint2D = tangentPoints[j]; } } } } if (mindist < double.MaxValue) { if (!linePositionMiddle) { startPoint = pl.ToGlobal(startPoint2D); endPoint = startPoint + lineLength * lineDir; } else { startPoint = pl.ToGlobal(startPoint2D) - (lineLength / 2.0) * lineDir; endPoint = pl.ToGlobal(startPoint2D) + (lineLength / 2.0) * lineDir; } line.SetTwoPoints(startPoint, endPoint); tangCurves = (ICurve[])usableCurves.ToArray(typeof(ICurve)); // tangCurves wird mit den gültigen überschrieben und unten zur Anzeige zurückgegeben an den Sender base.BasePoint = pl.ToGlobal(startPoint2D); // base.BasePoint = line.StartPoint; return(true); } } // hier Prototyp-Darstellung: if (!linePositionMiddle) { startPoint = base.BasePoint; endPoint = startPoint + lineLength * lineDir; } else { startPoint = base.BasePoint - (lineLength / 2.0) * lineDir; endPoint = base.BasePoint + (lineLength / 2.0) * lineDir; } // startPoint = base.BasePoint; // endPoint = startPoint+lineLength*lineDir; line.SetTwoPoints(startPoint, endPoint); return(false); }