コード例 #1
0
        private void InitializeHexagons()
        {
            Rectangle clientRectangle = base.ClientRectangle;

            clientRectangle.Inflate(-8, -8);
            clientRectangle.Height -= this.GetHexagonWidth(Math.Min(clientRectangle.Height, clientRectangle.Width)) * 3;
            if (clientRectangle.Height < clientRectangle.Width)
            {
                clientRectangle.Inflate(-(clientRectangle.Width - clientRectangle.Height) / 2, 0);
            }
            else
            {
                clientRectangle.Inflate(0, -(clientRectangle.Height - clientRectangle.Width) / 2);
            }

            //
            int hexagonWidth           = this.GetHexagonWidth(clientRectangle.Height);
            int centerOfMiddleHexagonX = (clientRectangle.Left + clientRectangle.Right) / 2;
            int centerOfMiddleHexagonY = (clientRectangle.Top + clientRectangle.Bottom) / 2;

            //
            this.hexagonElements[0].CurrentColor = Color.White;
            this.hexagonElements[0].SetHexagonPoints((float)centerOfMiddleHexagonX, (float)centerOfMiddleHexagonY, hexagonWidth);
            int index = 1;

            for (int i = 1; i < this.sectorMaximum; i++)
            {
                //
                float currentHexagonY = centerOfMiddleHexagonY;
                float currentHexagonX = centerOfMiddleHexagonX + (hexagonWidth * i);

                for (int innerIndex = 0; innerIndex < (this.sectorMaximum - 1); innerIndex++)
                {
                    int verticalStep   = (int)(hexagonWidth * this.matrix2[innerIndex]);
                    int horizontalStep = (int)(hexagonWidth * this.matrix1[innerIndex]);

                    for (int innermostIndex = 0; innermostIndex < i; innermostIndex++)
                    {
                        double colorQuotient2 = ((0.936 * (this.sectorMaximum - i)) / ((double)this.sectorMaximum)) + 0.12;
                        float  colorQuotient1 = ColorServices.GetColorQuotient(currentHexagonX - centerOfMiddleHexagonX, currentHexagonY - centerOfMiddleHexagonY);
                        this.hexagonElements[index].SetHexagonPoints(currentHexagonX, currentHexagonY, hexagonWidth);
                        this.hexagonElements[index].CurrentColor = ColorServices.ColorFromRGBRatios((double)colorQuotient1, colorQuotient2, 1);
                        currentHexagonY += verticalStep;
                        currentHexagonX += horizontalStep;
                        index++;
                    }
                }
            }

            InitializeGrayscaleHexagons(ref clientRectangle, hexagonWidth, ref centerOfMiddleHexagonX, ref centerOfMiddleHexagonY, ref index);
        }
コード例 #2
0
        private void InitializeHexagons()
        {
            Rectangle clientRectangle = this.ClientRectangle;

            clientRectangle.Offset(0, -8);
            if (clientRectangle.Height < clientRectangle.Width)
            {
                clientRectangle.Inflate(-(clientRectangle.Width - clientRectangle.Height) / 2, 0);
            }
            else
            {
                clientRectangle.Inflate(0, -(clientRectangle.Height - clientRectangle.Width) / 2);
            }
            int hexagonWidth           = this.GetHexagonWidth(Math.Min(clientRectangle.Height, clientRectangle.Width));
            int centerOfMiddleHexagonX = (clientRectangle.Left + clientRectangle.Right) / 2;
            int centerOfMiddleHexagonY = (clientRectangle.Top + clientRectangle.Bottom) / 2 - hexagonWidth;

            this.hexagonElements[0].CurrentColor = Color.White;
            this.hexagonElements[0].SetHexagonPoints((float)centerOfMiddleHexagonX, (float)centerOfMiddleHexagonY, hexagonWidth);
            int index1 = 1;

            for (int index2 = 1; index2 < this.sectorMaximum; ++index2)
            {
                float yCoordinate = (float)centerOfMiddleHexagonY;
                float xCoordinate = (float)(centerOfMiddleHexagonX + hexagonWidth * index2);
                for (int index3 = 0; index3 < this.sectorMaximum - 1; ++index3)
                {
                    int num1 = (int)((double)hexagonWidth * (double)this.matrix2[index3]);
                    int num2 = (int)((double)hexagonWidth * (double)this.matrix1[index3]);
                    for (int index4 = 0; index4 < index2; ++index4)
                    {
                        double num3          = 0.936 * (double)(this.sectorMaximum - index2) / (double)this.sectorMaximum + 0.12;
                        float  colorQuotient = ColorServices.GetColorQuotient(xCoordinate - (float)centerOfMiddleHexagonX, yCoordinate - (float)centerOfMiddleHexagonY);
                        this.hexagonElements[index1].SetHexagonPoints(xCoordinate, yCoordinate, hexagonWidth);
                        this.hexagonElements[index1].CurrentColor = ColorServices.ColorFromRGBRatios((double)colorQuotient, num3, 1.0);
                        yCoordinate += (float)num1;
                        xCoordinate += (float)num2;
                        ++index1;
                    }
                }
            }
            clientRectangle.Y -= hexagonWidth + hexagonWidth / 2;
            this.InitializeGrayscaleHexagons(ref clientRectangle, hexagonWidth, ref centerOfMiddleHexagonX, ref centerOfMiddleHexagonY, ref index1);
        }