/// <summary> /// Round the polygon's corners. /// </summary> internal void RoundCorner() { if (_roundingRate > 0.0) { if (!_rounded) { // ne doit être exécutée en principe qu'une fois // pour permettre la binding et // pour éviter les arrondis d'arrondis... // inconvénient : si de nouveaux points sont ajoutés à PointList, on ne peut pas les arrondir // la méthode publique InitializeNotRoundedPointList() est donc fournie pour forcer la réinitialisation InitializeNotRoundedPointList(); } Point3DCollection points = new Point3DCollection(); for (int i = 0; i <= _notRoundedPoints.Count - 1; i++) { Point3D pA = new Point3D(); Point3D pB = new Point3D(); Point3D pC = new Point3D(); pB = _notRoundedPoints[i]; if (i >= 1) { pA = _notRoundedPoints[i - 1]; } else if (i == 0) { pA = _notRoundedPoints[_notRoundedPoints.Count - 1]; } if (i < _notRoundedPoints.Count - 1) { pC = _notRoundedPoints[i + 1]; } else if (i == _notRoundedPoints.Count - 1) { pC = _notRoundedPoints[0]; } Point3DCollection pl = Helper3D.RoundCorner(pA, pB, pC, _roundingRate); Helper3D.CopyPoints(pl, points); } Helper3D.ClonePoints(points, Points); _rounded = true; } }
/// <summary> /// Reinitialize not rounded points list, if necessary /// (i.e. after a Points initialization). /// </summary> /// <seealso cref="RoundCorner"/> public void InitializeNotRoundedPointList() { Helper3D.ClonePoints(Points, _notRoundedPoints); }