Teechart를 사용하여 winforms에서 3D 플롯을 만듭니다. 차트에 첫 번째 서페이스를 추가하면 범례 상자에 색으로 채워진 상자가있는 범례 항목 (값)이 표시됩니다. 그러나 둘 이상의 서페이스를 추가하면 범례의 범례 항목 상자 (서페이스를 나타내는)가 흰색입니다. 나는 그 (것)들이 표면 또는 시리즈 색깔로 채워질 것이라는 점을 예상한다.3D TeeChart의 legendbox 색상을 기본 데이터 시리즈의 색상으로 설정하는 방법은 무엇입니까?
은 내가
tChart.Legend.FontSeriesColor true로
을 설정하여 범례 항목의 텍스트의 색상을 설정 관리,하지만 나는 전설을 채우는 방법을 이해할 수 없었다 색 상자입니다.
나는 두 시나리오의 스크린 샷을 첨부 -
모두에게 감사드립니다.
샘플 코드는 : 그것은 세포를 그릴 수있는 ColorRange을 사용하는 경우
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DisplayChart();
}
private void DisplayChart()
{
tChart1.Series.Clear();
tChart1.Legend.FontSeriesColor = true;
CreateSurface(new Plot3DSurface("X", "Y", "Z", new List<double> { 1.0, 2.0, 3.0 }, new List<double> { 3, 4, 7 }, new List<double> { 3, 5, 7 }, GetPoints(3, 3), "First", Color.Blue));
CreateSurface(new Plot3DSurface("X", "Y", "Z", new List<double> { 1.0, 3.0, 6.0 }, new List<double> { 3, 5, 8 }, new List<double> { 5, 8, 10.5 }, GetPoints(3, 3), "Second", Color.Green));
}
private static List<Point> GetPoints(int x, int y)
{
var points = new List<Point>();
for (var p = 0; p < x; p++)
{
for (var t = 0; t < y; t++)
{
points.Add(new Point(p, t));
}
}
return points;
}
private void CreateSurface(IPlot3DSurface surfaceInfo)
{
Custom3D surface;
var xCount = surfaceInfo.IndexesUsed.Select(index => index.X).Distinct().Count();
var yCount = surfaceInfo.IndexesUsed.Select(index => index.Y).Distinct().Count();
if (xCount < 2 || yCount < 2)
{
surface = new Points3D(tChart1.Chart);
}
else
{
surface = new Surface(tChart1.Chart)
{
Title = surfaceInfo.Title,
WireFrame = false,
DotFrame = false,
UseColorRange = true,
UsePalette = false,
ColorEach = false,
IrregularGrid = true,
PaletteStyle = PaletteStyles.Strong,
StartColor = surfaceInfo.Color,
Color = surfaceInfo.Color,
};
}
DrawPoints(surfaceInfo, surface);
}
private void DrawPoints(IPlot3DSurface surfaceInfo, Custom3D surface)
{
foreach (var point in surfaceInfo.IndexesUsed)
{
surface.Add(surfaceInfo.GetXValue(point.X), surfaceInfo.GetZValue(point.X), surfaceInfo.GetYValue(point.Y));
}
}
}
public class Plot3DSurface : IPlot3DSurface
{
public Plot3DSurface(string xCoordinatePropertyName, string yCoordinatePropertyName, string zCoordinatePropertyName,
List<double> dataSourceListXCoordinate, List<double> dataSourceListYCoordinate, List<double> dataSourceZCoordinate,
List<Point> dataSourceIndexList, string title, Color color)
{
DataSourceListXCoordinate = dataSourceListXCoordinate;
DataSourceListYCoordinate = dataSourceListYCoordinate;
DataSourceListZCoordinate = dataSourceZCoordinate;
XCoordinatePropertyName = xCoordinatePropertyName;
YCoordinatePropertyName = yCoordinatePropertyName;
ZCoordinatePropertyName = zCoordinatePropertyName;
Title = title;
Color = color;
IndexesUsed = dataSourceIndexList;
}
private List<Point> _indexesUsed;
public List<Point> IndexesUsed
{
get
{
if (_indexesUsed != null) return _indexesUsed;
var ind = new List<Point>();
for (var i = 0; i < DataCountXCoordinate; i++)
for (var j = 0; j < DataCountYCoordinate; j++)
ind.Add(new Point(i, j));
return ind;
}
private set { _indexesUsed = value; }
}
private IList<double> DataSourceListXCoordinate { get; set; }
private IList<double> DataSourceListYCoordinate { get; set; }
private IList<double> DataSourceListZCoordinate { get; set; }
private int DataCountXCoordinate
{
get { return DataSourceListXCoordinate.Count; }
}
private int DataCountYCoordinate
{
get { return DataSourceListYCoordinate.Count; }
}
private string XCoordinatePropertyName { get; set; }
private string YCoordinatePropertyName { get; set; }
private string ZCoordinatePropertyName { get; set; }
public string XCoordinatePropertyDisplayName
{
get { return XCoordinatePropertyName + " (" + DataSourceListXCoordinate[0] + ")"; }
}
public string YCoordinatePropertyDisplayName
{
get { return YCoordinatePropertyName + " (" + DataSourceListYCoordinate[0] + ")"; }
}
public string ZCoordinatePropertyDisplayName
{
get { return ZCoordinatePropertyName + " (" + DataSourceListZCoordinate[0] + ")"; }
}
public string Title { get; private set; }
public Color Color { get; private set; }
public double? GetXValue(int i)
{
return DataSourceListXCoordinate[i];
}
public double? GetYValue(int i)
{
return DataSourceListYCoordinate[i];
}
public double? GetZValue(int i)
{
return DataSourceListZCoordinate[i];
}
public double GetMinX
{
get { return DataSourceListXCoordinate.Min(v => v); }
}
public double GetMaxX
{
get { return DataSourceListXCoordinate.Max(v => v); }
}
public double GetMinY
{
get { return DataSourceListYCoordinate.Min(v => v); }
}
public double GetMaxY
{
get { return DataSourceListYCoordinate.Max(v => v); }
}
public double GetMinZ
{
get { return DataSourceListZCoordinate.Min(v => v); }
}
public double GetMaxZ
{
get { return DataSourceListZCoordinate.Max(v => v); }
}
}
public interface IPlot3DSurface
{
List<Point> IndexesUsed { get; }
string XCoordinatePropertyDisplayName { get; }
string YCoordinatePropertyDisplayName { get; }
string ZCoordinatePropertyDisplayName { get; }
string Title { get; }
double? GetXValue(int i);
double? GetYValue(int i);
double? GetZValue(int i);
double GetMinX { get; }
double GetMaxX { get; }
double GetMinY { get; }
double GetMaxY { get; }
double GetMinZ { get; }
double GetMaxZ { get; }
Color Color { get; }
}
감사 Yeray을
당신이 시리즈의 색상을 강제하려는 경우가 전설 기호에 그려 질, 당신은
OnSymbolDraw
이벤트를 사용할 수 있습니다. 그것은 작동합니다. – Manish