internal virtual void ResetNodes() { Nodes = new NutcrackerNodes[Rows, Cols]; for (var row = 0; row < Rows; row++) { for (var col = 0; col < Cols; col++) { Nodes[row, col] = new NutcrackerNodes(); } } }
public override void InitializePreview(Rectangle rect) { var top = (int)nudTopCount.Value; var sides = (int)nudSideCount.Value; var bottom = (int)nudBottomCount.Value; Cols = Math.Max(Math.Max(top, bottom),sides); Rows = 4; Nodes = new NutcrackerNodes[Rows, Cols]; for (var row = 0; row < Rows; row++) { for (var col = 0; col < Cols; col++) { Nodes[row, col] = new NutcrackerNodes {Model = new Point(-1,-1)}; } } var spacing = Math.Min(rect.Width, rect.Height); var maxWidth = Math.Max(top, bottom); var xSpacing = spacing / (maxWidth + 2); var ySpacing = spacing / (sides + 2); var xOffset = (rect.Width - (xSpacing * (maxWidth + 3))) / 2; var yOffset = (rect.Height - (ySpacing * (sides + 3))) / 2; int x, y; // x = left to right // y = top to bottom // Starts at bottom left with the left side - should be the left most/bottom most pixel. for (y = sides - 1; y >= 0; y--) { Nodes[0, y].Model = new Point(xSpacing + xOffset, (y + 2) * ySpacing + yOffset); } // Now top from left to right for (x = 0; x < top; x++) { Nodes[1, x].Model = new Point((x + 1) * xSpacing + xOffset, ySpacing + yOffset); } // Now top right to bottom right x = (maxWidth + 1) * xSpacing + xOffset; for (y = 0; y < sides; y++) { Nodes[2, y].Model = new Point(x, (y + 1) * ySpacing + yOffset); } // Finally, finish along bottom y = (sides + 1) * ySpacing + yOffset; var margin = top <= bottom ? 0 : top - bottom; for (x = bottom - 1; x >= 0; x--) { Nodes[3, x].Model = new Point((x + 2 + margin) * xSpacing + xOffset, y); } }