/// <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> /// Deleted a coordinate /// </summary> internal void DeletedCoordinate(IList <Coordinate> coordinates, Coordinate lastCoordinate) { if (coordinates.Count == 0) { // No elements left _baseElement = null; _measureElements.Clear(); } else if (coordinates.Count == 1) { // Set the base elements last coordinate _baseElement.End = lastCoordinate; _baseElement.RecalculateCurvesAndAnnotations(false); _measureElements.Clear(); } else { // Remove the last coordinates while (_measureElements.Count > coordinates.Count - 1) { _measureElements.RemoveAt(_measureElements.Count - 1); } int coordsCount = coordinates.Count; int measureCount = _measureElements.Count; if (measureCount < coordsCount - 1) { // Not enough measure stuff var newMeasureElement = new DimMeasureElement() { Base = _baseElement, End = lastCoordinate, Transform = this.Transform, CoordinateSystem = this.CoordinateSystem, CSUnitsPerPixel = _csUnitsPerPixel }; newMeasureElement.RecalculateCurvesAndAnnotations(true); _measureElements.Add(newMeasureElement); } else { var element = _measureElements[measureCount - 1]; element.End = lastCoordinate; element.RecalculateCurvesAndAnnotations(true); } } }
/// <summary> /// Moved a coordinate /// </summary> internal void MovedCoordinate(IList <Coordinate> coordinates, Coordinate lastCoordinate) { if (coordinates.Count <= 1) { // We are moving the base element around if (_baseElement != null) { _baseElement.End = lastCoordinate; _baseElement.RecalculateCurvesAndAnnotations(false); } } else { if (coordinates.Count == 2) { _baseElement.RecalculateCurvesAndAnnotations(true); } // 2 Coordinates: 1 Base // 3 Coordinates: 1 Dim element // 4 Coordinates: 2 Dim elements, etc. int coordsCount = coordinates.Count; int measureCount = _measureElements.Count; if (measureCount < coordsCount - 1) { // Not enough measure stuff 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); } else { var element = _measureElements[measureCount - 1]; element.End = lastCoordinate; element.RecalculateCurvesAndAnnotations(true); } } }