Пример #1
0
            /// <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);
                }
            }
Пример #2
0
            /// <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);
                }
            }