/// <summary> /// Added a coordinate /// </summary> internal void AddedCoordinate(IList <Coordinate> coordinates, Coordinate lastCoordinate) { if (coordinates.Count == 1) { // Create the new dimBaseElement, which holds the direction _baseElement = new DimBaseElement() { Start = lastCoordinate, End = lastCoordinate, Transform = this.Transform, CoordinateSystem = this.CoordinateSystem, CSUnitsPerPixel = _csUnitsPerPixel }; // Force recalculation _baseElement.RecalculateCurvesAndAnnotations(false); _measureElements.Clear(); } else if (coordinates.Count == 2) { // Set the base element's last coordinate if (_baseElement != null) { _baseElement.End = lastCoordinate; _baseElement.RecalculateCurvesAndAnnotations(true); } _measureElements.Clear(); } else { // Add extra elements if (_measureElements.Count > 0) { // Reverse the lot in case the added coordinate actually is invalid // (invalid means it is placed before the last coordinate). if (_measureElements.Count == 1 && !_measureElements[0].Valid) { Reverse(); } var last = _measureElements[_measureElements.Count - 1]; last.End = lastCoordinate; last.RecalculateCurvesAndAnnotations(true); } // Add the new element Coordinate lastElementCoordinate = _measureElements.Count > 0 ? _measureElements[_measureElements.Count - 1].Intermediate : _baseElement.End; bool first = _measureElements.Count == 0; var newMeasureElement = new DimMeasureElement() { Base = _baseElement, Start = lastElementCoordinate, End = lastCoordinate, Transform = this.Transform, CoordinateSystem = this.CoordinateSystem, First = first, CSUnitsPerPixel = _csUnitsPerPixel }; newMeasureElement.RecalculateCurvesAndAnnotations(true); _measureElements.Add(newMeasureElement); } }
/// <summary> /// Reverses the role of the base element /// </summary> internal void Reverse() { if (_measureElements.Count == 1) { var start = _baseElement.Start; var end = _baseElement.End; var distance = start.DistanceTo(end); var angle = start.AngleTo(end); var opposite = Coordinate.NewAtDistanceAngleFrom(start, distance * 2, angle); _baseElement.Start = opposite; _baseElement.RecalculateCurvesAndAnnotations(true); } }