|
|
|
|
using SciColorMaps.Portable;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows;
|
|
|
|
|
using System.Windows.Controls;
|
|
|
|
|
using System.Windows.Data;
|
|
|
|
|
using System.Windows.Documents;
|
|
|
|
|
using System.Windows.Input;
|
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
using System.Windows.Media.Imaging;
|
|
|
|
|
using System.Windows.Navigation;
|
|
|
|
|
using System.Windows.Shapes;
|
|
|
|
|
|
|
|
|
|
namespace Txgy.Controls
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ColorMapBar.xaml 的交互逻辑
|
|
|
|
|
/// </summary>
|
|
|
|
|
public partial class ColorMapBar : UserControl
|
|
|
|
|
{
|
|
|
|
|
public static readonly DependencyProperty UcWidthProperty = DependencyProperty.Register("UcWidth", typeof(double), typeof(ColorMapBar), new PropertyMetadata(40.0));
|
|
|
|
|
public double UcWidth
|
|
|
|
|
{
|
|
|
|
|
get { return (double)GetValue(UcWidthProperty); }
|
|
|
|
|
set { SetValue(UcWidthProperty, value); }
|
|
|
|
|
}
|
|
|
|
|
public static readonly DependencyProperty UcHeightProperty = DependencyProperty.Register("UcHeight", typeof(double), typeof(ColorMapBar), new PropertyMetadata(200.0));
|
|
|
|
|
public double UcHeight
|
|
|
|
|
{
|
|
|
|
|
get { return (double)GetValue(UcHeightProperty); }
|
|
|
|
|
set { SetValue(UcHeightProperty, value); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static readonly DependencyProperty TopDepthProperty = DependencyProperty.Register("TopDepthProperty", typeof(double), typeof(ColorMapBar), new PropertyMetadata(200.0));
|
|
|
|
|
public double TopDepth
|
|
|
|
|
{
|
|
|
|
|
get { return (double)GetValue(TopDepthProperty); }
|
|
|
|
|
set { SetValue(TopDepthProperty, value); }
|
|
|
|
|
}
|
|
|
|
|
public static readonly DependencyProperty BottomDepthProperty = DependencyProperty.Register("BottomDepthProperty", typeof(double), typeof(ColorMapBar), new PropertyMetadata(900.0));
|
|
|
|
|
public double BottomDepth
|
|
|
|
|
{
|
|
|
|
|
get { return (double)GetValue(BottomDepthProperty); }
|
|
|
|
|
set { SetValue(BottomDepthProperty, value); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static readonly DependencyProperty ColorPaletteProperty = DependencyProperty.Register("ColorPaletteProperty", typeof(string), typeof(ColorMapBar), new PropertyMetadata("plasma"));
|
|
|
|
|
public string ColorPalette
|
|
|
|
|
{
|
|
|
|
|
get { return (string)GetValue(ColorPaletteProperty); }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
SetValue(ColorPaletteProperty, value);
|
|
|
|
|
UpdatePanels();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public static readonly DependencyProperty PaletteBrushProperty = DependencyProperty.Register("PaletteBrushProperty", typeof(LinearGradientBrush), typeof(ColorMapBar), new PropertyMetadata(null));
|
|
|
|
|
public LinearGradientBrush PaletteBrush
|
|
|
|
|
{
|
|
|
|
|
get { return (LinearGradientBrush)GetValue(PaletteBrushProperty); }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
SetValue(PaletteBrushProperty, value);
|
|
|
|
|
//UpdatePanels();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ColorMap colorMap;
|
|
|
|
|
private const int ColorCountDefault = 256;
|
|
|
|
|
public static List<string> Palettes { get; } = ColorMap.Palettes.ToList();
|
|
|
|
|
//public LinearGradientBrush PaletteBrush { get; set; }
|
|
|
|
|
|
|
|
|
|
private string _selectedPalette = Palettes.FirstOrDefault();
|
|
|
|
|
public string SelectedPalette
|
|
|
|
|
{
|
|
|
|
|
get { return _selectedPalette; }
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_selectedPalette = value;
|
|
|
|
|
UpdatePanels();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public Color[] colors;
|
|
|
|
|
public ColorMapBar()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
UpdatePanels();
|
|
|
|
|
}
|
|
|
|
|
private void UpdatePanels()
|
|
|
|
|
{
|
|
|
|
|
//var colors = new[]
|
|
|
|
|
//{
|
|
|
|
|
// new byte[] {0, 0, 0},
|
|
|
|
|
// new byte[] {255, 255, 0},
|
|
|
|
|
// new byte[] {255, 0, 0},
|
|
|
|
|
// new byte[] {255, 255, 255}
|
|
|
|
|
//};
|
|
|
|
|
//var positions = new[] { 0, 0.3f, 0.7f, 1 };
|
|
|
|
|
|
|
|
|
|
//var cmap1 = ColorMap.CreateFromColors(colors, positions, colorCount: ColorCountDefault);
|
|
|
|
|
colorMap = new ColorMap(ColorPalette, colorCount: ColorCountDefault);
|
|
|
|
|
//var cmap3 = new MirrorColorMap(cmap2);
|
|
|
|
|
//colors = CreateColors(colorMap);
|
|
|
|
|
PaletteBrush = CreatePaletteBrush(colorMap);
|
|
|
|
|
}
|
|
|
|
|
private Color[] CreateColors(ColorMap cmap)
|
|
|
|
|
{
|
|
|
|
|
return cmap.Colors().Select((color)=>color.ToMediaColor()).ToArray();
|
|
|
|
|
}
|
|
|
|
|
private LinearGradientBrush CreatePaletteBrush(ColorMap cmap)
|
|
|
|
|
{
|
|
|
|
|
return new LinearGradientBrush
|
|
|
|
|
{
|
|
|
|
|
StartPoint = new System.Windows.Point(0, 0),
|
|
|
|
|
EndPoint = new System.Windows.Point(0, 1),
|
|
|
|
|
GradientStops = new GradientStopCollection(
|
|
|
|
|
cmap.Colors()
|
|
|
|
|
.Select((color, i) => new GradientStop()
|
|
|
|
|
{
|
|
|
|
|
Color = color.ToMediaColor(),
|
|
|
|
|
Offset = (float)(ColorCountDefault-i) / ColorCountDefault
|
|
|
|
|
})
|
|
|
|
|
.ToList())
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public static class ColorUtils
|
|
|
|
|
{
|
|
|
|
|
public static Color ToMediaColor(this byte[] rgb)
|
|
|
|
|
{
|
|
|
|
|
return Color.FromRgb(rgb[0], rgb[1], rgb[2]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|