private static double ClosestValue(TeeChart.Styles.Custom3D src, double x, double z) { double maxdist = 1.0e+300; int closer = -1; double tmpx, tmpz, dist; for (int i = 0; i < src.Count; i++) { tmpx = src.XValues[i] - x; tmpz = src.ZValues[i] - z; dist = Math.Sqrt(tmpx * tmpx + tmpz * tmpz); if (dist < maxdist) { maxdist = dist; closer = i; } } if (closer == -1) { return(0.0); } else { return(src.YValues[closer]); } }
public static void CreateGrid(TeeChart.Styles.Custom3D src, TeeChart.Styles.Custom3DGrid dst, int gridsize) { double tmpminx = src.XValues.Minimum; double tmpminz = src.ZValues.Minimum; double tmpxfact = src.XValues.Range / (double)gridsize; double tmpzfact = src.ZValues.Range / (double)gridsize; double tmpx, tmpz, tmpy; int iindex; dst.BeginUpdate(); try { dst.Clear(); dst.IrregularGrid = true; dst.NumXValues = gridsize; dst.NumZValues = gridsize; // loop all grid cells for (int x = 1; x <= dst.NumXValues; x++) { tmpx = tmpminx + (x - 1) * tmpxfact; for (int z = 1; z <= dst.NumZValues; z++) { tmpz = tmpminz + (z - 1) * tmpzfact; tmpy = ClosestValue(src, tmpx, tmpz); iindex = dst[x, z]; if (iindex != -1) { dst.YValues.Value[iindex] = tmpy; dst.XValues.Value[iindex] = tmpx; dst.ZValues.Value[iindex] = tmpz; } else { dst[x, z] = dst.Add(tmpx, tmpy, tmpz); } } } } finally { dst.EndUpdate(); } }