protected override string FormatItem(Altaxo.Data.AltaxoVariant item)
		{
			if (item.IsType(Altaxo.Data.AltaxoVariant.Content.VDouble))
				return FormatItem((double)item);
			else
				return item.ToString();
		}
		protected override string FormatItem(Altaxo.Data.AltaxoVariant item)
		{
			const double tolerance = 1E-8;
			int denominator = 1440; // this allows for resolution of a quarter of a degree

			if (!item.CanConvertedToDouble)
				return item.ToString();

			double value = (double)item;
			double multipvalue = value * denominator / Math.PI;
			double multipround = Math.Round(multipvalue, 0);

			if (Math.Abs(multipvalue - multipround) < tolerance && Math.Abs(multipround) < int.MaxValue) // then it is a ratio of pi
			{
				int nominator = (int)multipround;
				Shorten(ref nominator, ref denominator);
				if (nominator == 0)
					return "0";
				else
				{
					string pre;
					if (nominator == 1)
						pre = string.Empty;
					else if (nominator == -1)
						pre = "-";
					else
						pre = nominator.ToString();

					string post;
					if (denominator == 1)
						post = string.Empty;
					else
						post = "/" + denominator.ToString();

					return pre + '\u03c0' + post;
				}
			}

			return item.ToString();
		}
		protected override string FormatItem(Altaxo.Data.AltaxoVariant item)
		{
			return item.ToString();
		}
示例#4
0
		public override double PhysicalVariantToNormal(Altaxo.Data.AltaxoVariant x)
		{
			if (x.IsType(Altaxo.Data.AltaxoVariant.Content.VString))
			{
				int idx = _dataBounds.IndexOf(x.ToString());
				return idx < 0 ? double.NaN : (1 + idx - _cachedAxisOrg) * _cachedOneByAxisSpan;
			}
			else if (x.CanConvertedToDouble)
			{
				return (x.ToDouble() - _cachedAxisOrg) * _cachedOneByAxisSpan;
			}
			else
			{
				return double.NaN;
			}
		}
示例#5
0
    /// <summary>
    /// Processes a single value .
    /// If the data value is text, the boundaries are
    /// updated and the number of items is increased by one (if not contained already). The function returns true
    /// in this case. On the other hand, if the value is outside the range, the function has to
    /// return false.
    /// </summary>
    /// <param name="item">The data item.</param>
    /// <returns>True if data is in the tracked range, false if the data is not in the tracked range.</returns>
    public  bool Add(Altaxo.Data.AltaxoVariant item)
    {
      if(item.IsType(Altaxo.Data.AltaxoVariant.Content.VString))
      {
        string s = item.ToString();
        if (!_itemList.Contains(s))
        {
          _itemList.Add(s);

          if (_eventSuspendCount == 0)
          {
            OnNumberOfItemsChanged();
            OnBoundaryChanged(false, true);
          }

          return true;
        }
      }
      return false;
    }