public Bloxator()
 {
     _textCode       = null;
     _complietBlocks = new List <Block>();
     _notEndetBlocks = new List <Block>();
     _complietMethod = new BlockMethod();
     _complietClass  = new BlockClass("defaultName");
     ShapeCreated    = false;
 }
        private void button1_Click(object sender, EventArgs e)
        {
            Bloxator blox = new Bloxator();

            blox.TextCode = textBox1.Text;
            blox.CreateShape(textBox1.Text);
            BlockMethod blokMethod = blox.GetComplietShape();

            Designer.GenerateDiagram(blokMethod);
        }
        public static void GenerateDiagram(BlockMethod blokMethod)
        {
            Application application = new Application(); application.Visible = false;
            Document    doc = application.Documents.Add(templatePath);
            Document    stencil = application.Documents.OpenEx(stencilName, (short)VisOpenSaveArgs.visOpenHidden);
            Page        page = application.Documents[1].Pages[1]; double x = 290;

            for (int i = 0; i < blokMethod.Blocks.Count; i++)
            {
                if (x - 20 * blokMethod.Blocks[i].Top < 7.5)
                {
                    page = application.Documents[1].Pages.Add(); x = x + 290;
                }
                switch (blokMethod.Blocks[i].Type)
                {
                case BlockType.Процесс:
                    Shape shape0 = page.Drop(stencil.Masters["Процесс"], (105 + 25 * blokMethod.Blocks[i].Left) / 25.4, (x - 20 * blokMethod.Blocks[i].Top) / 25.4);
                    shape0.Text = blokMethod.Blocks[i].Text; blokMethod.Blocks[i].shape = shape0; break;

                case BlockType.Оконечная_фигура:
                    Shape shape1 = page.Drop(stencil.Masters["Оконечная фигура"], (105 + 25 * blokMethod.Blocks[i].Left) / 25.4, (x - 20 * blokMethod.Blocks[i].Top) / 25.4);
                    shape1.Text = blokMethod.Blocks[i].Text; blokMethod.Blocks[i].shape = shape1; break;

                case BlockType.Заранее_определенный_процесс:
                    Shape shape2 = page.Drop(stencil.Masters["Заранее определенный процесс"], (105 + 25 * blokMethod.Blocks[i].Left) / 25.4, (x - 20 * blokMethod.Blocks[i].Top) / 25.4);
                    shape2.Text = blokMethod.Blocks[i].Text; blokMethod.Blocks[i].shape = shape2; break;

                case BlockType.ешение:
                    Shape shape3 = page.Drop(stencil.Masters["Решение"], (105 + 25 * blokMethod.Blocks[i].Left) / 25.4, (x - 20 * blokMethod.Blocks[i].Top) / 25.4);
                    shape3.Text = blokMethod.Blocks[i].Text; blokMethod.Blocks[i].shape = shape3; break;

                case BlockType.Подготовка:
                    Shape shape4 = page.Drop(stencil.Masters["Подготовка"], (105 + 25 * blokMethod.Blocks[i].Left) / 25.4, (x - 20 * blokMethod.Blocks[i].Top) / 25.4);
                    shape4.Text = blokMethod.Blocks[i].Text; blokMethod.Blocks[i].shape = shape4; break;

                case BlockType.Предел_цикла:
                    Shape shape5 = page.Drop(stencil.Masters["Предел цикла"], (105 + 25 * blokMethod.Blocks[i].Left) / 25.4, (x - 20 * blokMethod.Blocks[i].Top) / 25.4);
                    shape5.Text = blokMethod.Blocks[i].Text; blokMethod.Blocks[i].shape = shape5; break;
                }
            }
            for (int i = 0; i < blokMethod.Blocks.Count - 1; i++)
            {
                Block activeBlock = blokMethod.Blocks[i];
                if (activeBlock.Type == BlockType.ешение)
                {
                    if (activeBlock.NextBlocks[0] != null)
                    {
                        activeBlock.shape.AutoConnect(activeBlock.NextBlocks[0].shape, VisAutoConnectDir.visAutoConnectDirLeft, stencil.Masters["Динамическая соединительная линия"]);
                    }
                    if (activeBlock.NextBlocks[1] != null)
                    {
                        activeBlock.shape.AutoConnect(activeBlock.NextBlocks[1].shape, VisAutoConnectDir.visAutoConnectDirRight, stencil.Masters["Динамическая соединительная линия"]);
                    }
                }
                else
                {
                    if (activeBlock.NextBlocks[0] != null)
                    {
                        activeBlock.shape.AutoConnect(activeBlock.NextBlocks[0].shape, VisAutoConnectDir.visAutoConnectDirNone, stencil.Masters["Динамическая соединительная линия"]);
                    }
                }
            }
            doc.SaveAs(fileName); doc.Close(); stencil.Close();
        }