Dotter: Титульная страница

Dotter v. 3.1
  • Титульная страница
  • Описания
  • Группы
  • Пространства имен
  • Классы
  • Файлы
Dotter Документация

Dotter

Copyright:
(C) Danila Baygushev

Предупреждения:
Для использования библиотеки требуется согласие автора.

По вопросам и предложениям захватить мир просьба обращаться сюда: IDanila24@gmail.com. У нас есть печеньки.
Библиотека для красивой визуализации деревьев и других графов на основе dot.
Dotter - библиотека для красивой визуализации деревьев и других графов на основе dot. Разработана с целью упростить дебаггинг деревьев и насладиться красотой.

Предупреждения:
Работа библиотеки основывается на dot. Установка dot производится при установке Dotter. Для корректной работы Вашей программы, использующую Dotter, на другом компьютере требуется установка dot/Dotter.

Документация на русском языке.

Чтобы начать работу с библиотекой просто перейдите в раздел описания, и посмотрите примеры.

Документация по Dotter. Последние изменения: Чт 25 Окт 2012 22:12:54. Создано системой doxygen 1.7.6.1


Dotter: Описания

  • Группы
  • Пространства имен
  • Классы
  • Файлы
Описания
Полный список дополнительных описаний.
  • Пример 1. Учимся строить простой граф.
  • Пример 2. Учимся применять стили.
  • Пример 3. Пример dump'а дерева.
  • Пример 4. Самый сложный.


Dotter: Пример 1. Учимся строить простой граф.

  • Файлы
Пример 1. Учимся строить простой граф.

На этом уроке вы научитесь:

  • Рисовать узлы
  • Рисовать связи (ссылки)

Результат:

Код:

#include "Dotter.h"

int main ()
{
    dtBegin ("Example1.dot"); //Начало dot графа

    dtNode (0, "Node number 0!"); //Рисуем узел 0 с надписью "Node number 0"
    dtNode (1, "Node number 1!"); //Рисуем узел 1 с надписью "Node number 1"
    dtNode (2, "Node number 2!"); //Рисуем узел 2 с надписью "Node number 2"
    dtNode (3, "Node number 3!"); //Рисуем узел 3 с надписью "Node number 3"

    dtLink (0, 1, "Link from 0 to 1!"); //Рисуем связь узла 0 с узлом 1
    dtLink (0, 2, "Link from 0 to 2!"); //Рисуем связь узла 0 с узлом 2

    dtLink (1, 3, "Link from 1 to 3!"); //Рисуем связь узла 1 с узлом 3
    dtLink (2, 3, "Link from 2 to 3!"); //Рисуем связь узла 2 с узлом 3

    dtLink (3, 0, "Link from 3 to 0!"); //Рисуем связь узла 3 с узлом 0

    dtEnd (); //Конец dot графа

    dtRender ("Example1.dot"); //Делаем из файла картинку
}


Dotter: Пример 2. Учимся применять стили.

  • Файлы
Пример 2. Учимся применять стили.

На этом уроке вы научитесь:

  • Изменять стили
  • Применять стили

Результат:

Код:

#include "Dotter.h"

int main ()
{
    dtBegin ("Example2.dot"); //Начало dot графа

    dtNodeStyle ().shape    ("tab")     //Меняем форму на tab
                  .color    ("yellow")  //Меняем цвет на yellow
                  .fillcolor("red")     //Меняем цвет заливки на red
                  .style    ("filled"); //Меняем стиль на filled

    dtNode (0, "There is writen truth!"); //Рисуем узел 0

    dtNodeStyle ().shape("folder")      //Меняем форму на folder
                  .color("aquamarine4") //Меняем цвет на aquamarine4
                  .fillcolor("violet"); //Меняем цвет заливки на violet

    dtNode (1, "There is written lies!"); //Рисуем узел 1

    dtNodeStyle ().shape     ("component") //Меняем форму на component
                  .color     ("blue")      //Меняем цвет на blue
                  .fillcolor ("lightblue") //Меняем цвет заливки на green
                  .style     ("filled");   //Меняем стиль на filled

    dtNode (2, "Choose your way!"); //Рисуем узел 2

    dtLinkStyle ().style ("dashed"); //Меняем стиль на dashed

    dtLink (1, 0); //Рисуем связь узла 1 с 0
    dtLink (0, 1); //Рисуем связь узла 0 с 1

    newDotLinkStyle ChooseWaysLink; //Создаём структуру с описанием стиля связи

    dtLinkStyle ().style ("bold") //Меняем стиль на bold
                  .color ("gold"); //Меняем цвет на gold

    dtLink (2, 0, "way 1"); //Рисуем связь узла 2 с 0
    dtLink (2, 1, "way 2"); //Рисуем связь узла 2 с 1

    dtEnd (); //Конец dot графа

    dtRender ("Example2.dot"); //Делаем из файла картинку
}


Dotter: Пример 3. Пример dump'а дерева.

  • Файлы
Пример 3. Пример dump'а дерева.

На этом уроке вы научитесь:

  • Делать dump дерева.

Результат:

Код:

#include "Dotter.h"

int main ()
{
    dtBegin ("Example3.dot"); //Начало dot графа

    dtNodeStyle ().shape ("box"); //Меняем форму на box

    dtNode (0, "i = 0\n value = 1"); //Рисуем узел 0
    dtNode (1, "i = 1\n value = 3"); //Рисуем узел 1
    dtNode (2, "i = 2\n value = 9"); //Рисуем узел 2
    dtNode (3, "i = 3\n value = 5"); //Рисуем узел 3
    dtNode (4, "i = 4\n value = 6"); //Рисуем узел 4
    dtNode (5, "i = 5\n value = 4"); //Рисуем узел 5
    dtNode (6, "i = 6\n value = 4"); //Рисуем узел 6

    dtLinkStyle ().style ("dashed"); //Меняем стиль на dashed

    dtLink (0, 1); //Рисуем связь узла 0 с 1
    dtLink (0, 2); //Рисуем связь узла 0 с 2
    dtLink (0, 3); //Рисуем связь узла 0 с 3

    dtLink (3, 4); //Рисуем связь узла 3 с 4
    dtLink (3, 5); //Рисуем связь узла 3 с 5

    dtLink (5, 6); //Рисуем связь узла 5 с 6

    dtLinkStyle ().style ("bold") //Меняем стиль на bold
                  .color ("red"); //Меняем цвет на red

    dtLink (4, 6, "Error"); //Рисуем связь узла 4 с 6

    dtEnd (); //Конец dot графа

    dtRender ("Example3.dot"); //Делаем из файла картинку
}


Dotter: Пример 4. Самый сложный.

  • Файлы
Пример 4. Самый сложный.

На этом уроке вы научитесь:

  • Делать dump дерева.
  • Создавать кластеры.
  • Строить дерево по выражению.
  • Считать выражение, заданное деревом.
  • Ассемблерировать строку.

Результат:

Код:
Печать дерева

#ifndef TREEPRINTER__
#define TREEPRINTER__

#include "Dotter.h"
#include "Tree.h"

//==============================================================================

void PrintNode (int i, newNode Node); //Рисует при помощи dotter узел

//==============================================================================

void PrintTree (newTree& Tree, bool Real = false); //Рисует в dotter дерево. Real = false, т. к. Real не красиво.

//==============================================================================

void PrintNode (int i, newNode Node)
{
    dtNodeStyle ().shape ("box")              //По умолчанию форма - коробка.
                  .style ("rounded, filled"); //По умолчанию стиль - заполненный, скруглёный.

    char Title [30] = ""; //Текст

    switch (Node.Descriptor) //Разбираем значения дескриптора и устанавливаем стиль и тайтл
    {
        case (N_NULL):
        {
            dtNodeStyle ().style ("diagonals");

            sprintf (Title, "%d\nNULL", i);

            break;
        }

        case (N_NUM):
        {
            dtNodeStyle ().fontcolor ("darkgreen") //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .color     ("darkgreen") //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .fillcolor ("#98FF66");  //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!

            sprintf (Title, "#%d\n%lg", i, Node.Value);

            break;
        }

        case (N_MUL):
        {
            dtNodeStyle ().fontcolor ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .color     ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .fillcolor ("#FFCCC9"); //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!

            sprintf (Title, "#%d\n*", i);

            break;
        }
        case (N_DIV):
        {
            dtNodeStyle ().fontcolor ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .color     ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .fillcolor ("#FFCCC9"); //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!

            sprintf (Title, "#%d\n/", i);

            break;
        }
        case (N_SUM):
        {
            dtNodeStyle ().fontcolor ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .color     ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .fillcolor ("#FFCCC9"); //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!

            sprintf (Title, "#%d\n+", i);

            break;
        }
        case (N_SUB):
        {
            dtNodeStyle ().fontcolor ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .color     ("red")      //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!
                          .fillcolor ("#FFCCC9"); //Эти чудесные цвета были подобраны И. Р. Дединским. Спасибо!

            sprintf (Title, "#%d\n-", i);

            break;
        }

        default:
        {
            dtNodeStyle ().shape ("egg")
                          .color ("yellow")
                          .style ("filled");

            sprintf (Title, "%d\nError! Descriptor = %d", i, Node.Descriptor);

            break;
        }
    }

    dtNode (i, Title); //Рисуем узел
}

//==============================================================================

void PrintTree (newTree& Tree, bool Real)
{
    for (int i = 0; i < Tree.Size (); i ++)
    {
        if (Real || Tree [i].Descriptor != N_NULL) PrintNode (i, Tree[i]);

        if (Tree.GetL (i) < Tree.Size () && (Real || Tree[Tree.GetL (i)].Descriptor != N_NULL) && (Real || Tree [i].Descriptor != N_NULL)) dtLink (i, Tree.GetL (i)); //Соединяем узел с левым ребёнком
        if (Tree.GetR (i) < Tree.Size () && (Real || Tree[Tree.GetR (i)].Descriptor != N_NULL) && (Real || Tree [i].Descriptor != N_NULL)) dtLink (i, Tree.GetR (i)); //Соединяем узел с правым ребёнком
    }
}

#endif

Сама программа

#include "Tree.h"
#include "TreePrinter.h"
#include "CreateTree.h"

int main ()
{
    try
    {
        int Size = 0;
        std::vector <newNode> Program;

        printf ("This program creates instance tree and calculate result.\nPlease, put instance:");

        std::vector <char> Instance;
        for (int i = 0; true; i ++)
        {
            Instance.resize (i + 1);
            scanf ("%c", &Instance [i]);

            if (Instance [i] == '\n' || Instance [i] == '\r' || Instance [i] == '\0' || Instance [i] == '\r')
            {
                Instance [i] = 0;

                break;
            }
        }

        ScanfProgram (&Instance[0], Program, &Size);

        newTree Tree;

        CreateTree (Tree, &Program [0], Size);

        dtBegin ("TreeDump.dot");

        PrintTree (Tree);

        fprintf (DotterSystem::CurrentFile, "    subgraph clusterTitle\n"); //Создаём кластер. Имя должно начинаться с cluster, иначе ничего не нарисуется.
        fprintf (DotterSystem::CurrentFile, "    {\n");
        fprintf (DotterSystem::CurrentFile, "        shape=\"rect\";\n");     //Форма = прямоугольник
        fprintf (DotterSystem::CurrentFile, "        style=\"filled\";\n");   //Стиль = с заливкой
        fprintf (DotterSystem::CurrentFile, "        \n");
        fprintf (DotterSystem::CurrentFile, "        color=\"black\";\n");    //Цвет = чёрый
        fprintf (DotterSystem::CurrentFile, "        fillcolor=\"gray\";\n"); //Цвет заливки = серый
        fprintf (DotterSystem::CurrentFile, "        \n");
        fprintf (DotterSystem::CurrentFile, "        fontsize=16;\n");        //Размер шрифта = 16 пт.
        fprintf (DotterSystem::CurrentFile, "        fontcolor=\"red\"\n");   //Цвет шрифта = красный
        fprintf (DotterSystem::CurrentFile, "        \n");
        fprintf (DotterSystem::CurrentFile, "        label=\"Info\";\n");     //Текст = Info
        fprintf (DotterSystem::CurrentFile, "        \n");
        fprintf (DotterSystem::CurrentFile, "        InstanceNode [shape=\"rect\", style=\"filled\", color=black, fillcolor=lightgray, label=\"%s\\nResult=%lg\"];\n", &Instance [0], GetResult(Tree)); //Пишем выражение и результат (см. Dotguide.pdf)
        fprintf (DotterSystem::CurrentFile, "    }\n");

        dtEnd ();

        dtRender ("TreeDump.dot");

        system ("pause");
    }

    catch (const char Error [])
    {
        printf ("Error! Message: %s\n", Error);

        system ("pause");
    }

    catch (...)
    {
        printf ("Error!");

        system ("pause");
    }
}

Ну, и кому интересно: Создание дерева

#ifndef CREATETREE__
#define CREATETREE__

#include "Tree.h"
#include "stdio.h"

//==============================================================================

void Cut (newTree& Tree); //Ужимает дерево

void UpBranch (newTree& Tree, int i); //Поднимает поддерево наверх

void ScanfProgram (char Instance [], std::vector <newNode>& Program, int* Size); //Преобразует Instance в программу

//==============================================================================

void CreateTree (newTree& Tree, newNode Program [], int Size); //Строит дерево

void GetM (newTree& Tree, int& Treei, newNode Program [], int& Size, int& i); //+-
void GetS (newTree& Tree, int& Treei, newNode Program [], int& Size, int& i); //*/
void GetN (newTree& Tree, int& Treei, newNode Program [], int& Size, int& i); //Число

//==============================================================================

double GetResult (newTree& Tree, int i = 0); //Вычисляет результат выражения, заданного деревом

//==============================================================================

void Cut (newTree& Tree)
{
    for (int i = Tree.Size () - 1; i > 0; i --)
    {
        if (Tree [i].Descriptor == N_NULL)
        {
            Tree.Size (i);
        }
        else
        {
            break;
        }
    }
}

void UpBranch (newTree& Tree, int i)
{
    for (int From = i, To = i, Up = Tree.GetP (i); From < Tree.Size (); From = Tree.GetL (From), To = Tree.GetR (To), Up = Tree.GetL (Up))
    {
        if (To >= Tree.Size ())
        {
            memcpy (&Tree[Up], &Tree[From], sizeof (newNode) * (Tree.Size () - From));

            for (int j = From; j < Tree.Size (); j ++)
            {
                Tree[j].Descriptor= N_NULL;
            }
        }
        else
        {
            memcpy (&Tree[Up], &Tree[From], sizeof (newNode) * (To - From + 1));

            for (int j = From; j < To + 1; j ++)
            {
                Tree[j].Descriptor = N_NULL;
            }
        }
    }

    Cut (Tree);
}

void ScanfProgram (char Instance [], std::vector <newNode>& Program, int* Size)
{
    int c = 0;
    int i = 0;
    while (true)
    {
        if (Instance [c] == '\n' || Instance [c] == '\r' || Instance [c] == '\0' || Instance [c] == '\r') break;
        if (Instance [c] == ' ')
        {
            c ++;
            continue;
        }

        if (Instance [c] == '+')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_SUM;

            i ++;
            c ++;
            continue;
        }
        if (Instance [c] == '-')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_SUB;

            i ++;
            c ++;
            continue;
        }
        if (Instance [c] == '*')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_MUL;

            i ++;
            c ++;
            continue;
        }
        if (Instance [c] == '/')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_DIV;

            i ++;
            c ++;
            continue;
        }

        if (Instance [c] == '(')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_OB;

            i ++;
            c ++;
            continue;
        }
        if (Instance [c] == ')')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_CB;

            i ++;
            c ++;
            continue;
        }

        if (Instance [c] >= '0' && Instance [c] <= '9')
        {
            Program.resize (i + 1);
            Program [i].Descriptor = N_NUM;

            Program [i].Value = Instance [c] - '0';

            bool Break = false;
            while (true)
            {
                c ++;

                if (Instance [c] == '\n' || Instance [c] == '\r' || Instance [c] == '\0' || Instance [c] == '\r')
                {
                    Break = true;
                    break;
                }
                if (Instance [c] < '0' || Instance [c] > '9') break;

                Program [i].Value *= 10;
                Program [i].Value += Instance [c] - '0';
            }

            i ++;

            if (Break) break;

            continue;
        }

        throw "Unknown symbol!";
    }

    *Size = i;
}

//==============================================================================

void CreateTree (newTree& Tree, newNode Program [], int Size)
{
    int Treei = 0, i = 0, PSize = Size;

    GetM (Tree, Treei, Program, PSize, i);
}

void GetM (newTree& Tree, int& Treei, newNode Program [], int& Size, int& i)
{
    int StartI = Treei;

    Treei = Tree.GetL (Treei);

    GetS (Tree, Treei, Program, Size, i);

    while (Program [i].Descriptor == N_SUM || Program [i].Descriptor == N_SUB)
    {
        Treei = Tree.GetP (Treei);

        Tree [Treei] = Program [i];

        i ++;

        Treei = Tree.GetR (Treei);

        Treei = Tree.GetL (Treei);

        GetS (Tree, Treei, Program, Size, i);
    }

    UpBranch (Tree, Treei);

    Treei = StartI;
}
void GetS (newTree& Tree, int& Treei, newNode Program [], int& Size, int& i)
{
    int StartI = Treei;

    Treei = Tree.GetL (Treei);

    GetN (Tree, Treei, Program, Size, i);

    while (Program [i].Descriptor == N_MUL || Program [i].Descriptor == N_DIV)
    {
        Treei = Tree.GetP (Treei);

        Tree [Treei] = Program [i];

        i ++;

        Treei = Tree.GetR (Treei);

        Treei = Tree.GetL (Treei);

        GetN (Tree, Treei, Program, Size, i);
    }

    UpBranch (Tree, Treei);

    Treei = StartI;
}
void GetN (newTree& Tree, int& Treei, newNode Program [], int& Size, int& i)
{
    if (i >= Size) throw "Need Num or (";

    if (Program [i].Descriptor == N_NUM)
    {
        Tree[Treei] = Program [i];

        i ++;

        return;
    }
    if (Program [i].Descriptor == N_OB)
    {
        i ++;

        GetM (Tree, Treei, Program, Size, i);

        if (Program [i].Descriptor != N_CB) throw "Need )";

        i ++;

        return;
    }

    throw "Need Num or (";
}

//==============================================================================

double GetResult (newTree& Tree, int i)
{
    if (i >= Tree.Size ()) throw "SyntaxError!!!"; //На всякий случай

    if (Tree [i].Descriptor == N_NUM)
    {
        return Tree[i].Value; //Число? Вернуть значение!
    }

    if (Tree.GetR (i) >= Tree.Size ()) throw "SyntaxError!!!"; //У всех не чисел должны быть дети

    if (Tree [i].Descriptor == N_SUM)
    {
        return GetResult (Tree, Tree.GetL (i)) + GetResult (Tree, Tree.GetR (i));
    }
    if (Tree [i].Descriptor == N_SUB)
    {
        return GetResult (Tree, Tree.GetL (i)) - GetResult (Tree, Tree.GetR (i));
    }
    if (Tree [i].Descriptor == N_MUL)
    {
        return GetResult (Tree, Tree.GetL (i)) * GetResult (Tree, Tree.GetR (i));
    }
    if (Tree [i].Descriptor == N_DIV)
    {
        return GetResult (Tree, Tree.GetL (i)) / GetResult (Tree, Tree.GetR (i));
    }

    throw "Unknown comand";
}

#endif

Класс дерева

#ifndef TREE__
#define TREE__

#include "vector"

//==============================================================================

enum NodeDescriptors
{
    N_NULL = -1,

    N_OB = 5,
    N_CB = 6,

    N_NUM = 0,

    N_MUL = 1,
    N_DIV = 2,

    N_SUM = 3,
    N_SUB = 4
};

struct newNode //Структура узла
{
    int Descriptor; //Уникальное число, указывающее на тип

    double Value;   //Значение

    newNode ();
};

newNode::newNode () :
    Descriptor (N_NULL)
{}

//==============================================================================

class newTree //Полное бинарное дерево(самое простое)
{
    private:
    int Size_;              //Размер
    std::vector <newNode> Data_; //Дата

    public:
    newTree ();

    bool OK ();   //Говорит, всё ли с деревом в порядке
    void Dump (); //Не используется (мы сделаем отдельно визуальный ;))

    int Size (); //Возвращает размер
    int Size (int NewSize); //Устанавливает размер

    int GetL (int Me); //Возвращает левого сына
    int GetR (int Me); //Возвращает правого сына
    int GetP (int Me); //Возвращает родителя

    newNode& operator [] (int i); //Возвращает ссылку на узел
};

//------------------------------------------------------------------------------

newTree::newTree () :
    Size_ (0)
{}

bool newTree::OK ()
{
    if (Size_ < 0) return false; //У нас самое простое дерево. Единственная возможная ошибка - отрицательный размер

    return true;
}

int newTree::Size ()
{
    return Size_; //Да, да - я не обманывал Вас (см. Выше) )
}

int newTree::Size (int NewSize)
{
    Size_ = NewSize;
}

int newTree::GetL (int Me)
{
    return 2 * Me + 1;
}
int newTree::GetR (int Me)
{
    return 2 * Me + 2;
}
int newTree::GetP (int Me)
{
    return (Me - 1) / 2;
}

newNode& newTree::operator [] (int i)
{
    if (!OK ()) throw "All BAD!"; //Проверяем, всё ли в порядке.

    if (i >= Size_) //Самый тупой способ. Если больше или равно, выделить память. Можно словить кучу неприятностей, если случайно передать мусор!
    {
        Size_ = i + 1;
        Data_.resize (Size_);
    }

    return Data_ [i];
}

#endif


Dotter: Группы

  • Файлы
Группы
Полный список групп.
  • Системная
  • Главная


Dotter: Системная

  • Файлы
Пространства имен | Функции
Системная

Пространства имен

namespace | DotterSystem

Здесь хранятся некоторые системные данные.

Функции

void | dtError (const char Message[])
Функция вывода ошибки.

Функции

void dtError ( const char Message[] )

Функция вывода ошибки.

Аргументы:
Message - сообщение, поясняющее ошибку


Dotter: Главная

  • Файлы
Классы | Функции
Главная

Классы

struct | newDotNodeStyle
Структура узла. Подробнее...
struct | newDotLinkStyle
Структура связи. Подробнее...

Функции

void | dtBegin (FILE *To)
Начать запись dot графа.
void | dtBegin (const char Name[])
Открыть файл и начать запись dot графа.
void | dtEnd ()
Закончить описание dot графа.
void | dtOut (const char Str[])
Вывести строку в пригодном для Dot формате.
newDotNodeStyle & | dtNodeStyle (const newDotNodeStyle NodeStyle=CurrentNodeStyle)
Устанавливает текущий стиль узла.
newDotLinkStyle & | dtLinkStyle (const newDotLinkStyle LinkStyle=CurrentLinkStyle)
Устанавливает текущий стиль узла.
void | dtNode (const int NodeN, const char Label[]="", const newDotNodeStyle NodeStyle=CurrentNodeStyle, const char ExtraParams[]="")
Функция рисования узла в dot.
void | dtLink (const int FromNode, const int ToNode, const char Label[]="", const newDotLinkStyle LinkStyle=CurrentLinkStyle, const char ExtraParams[]="")
Функция рисования соединения узлов в dot.
void | dtRender (const char From[], const char To[]="Graph.jpg", const char Type[]="jpg", const bool Show=true)
Функция генерирования изображения в dot.

Функции

void dtBegin ( FILE * To )

Начать запись dot графа.

Аргументы:
To - Файл, куда писать. Все команды (см. dtNode, dtLink) до dtEnd будут писаться в этот файл
void dtBegin ( const char Name[] ) [inline]

Открыть файл и начать запись dot графа.

Аргументы:
Name - Имя файла, куда писать. Все команды (см. dtNode, dtLink) до dtEnd будут писаться в этот файл
void dtLink | ( | const int | FromNode,
 |  | const int | ToNode,
 |  | const char | Label[] = "",
 |  | const newDotLinkStyle | LinkStyle = CurrentLinkStyle,
 |  | const char | ExtraParams[] = ""
 | ) |  |

Функция рисования соединения узлов в dot.

Аргументы:
FromNode | - Номер узла откуда
ToNode | - Номер узла куда
Label | - Текст, который надо разместить рядом.
LinkStyle | - Структура, со стилем связи. Если не указано, используется текущий (см. dtLinkStyle)
ExtraParams | - Дополнительные параметры(см. dotguide)
newDotLinkStyle & dtLinkStyle ( const newDotLinkStyle LinkStyle = CurrentLinkStyle )

Устанавливает текущий стиль узла.

Аргументы:
LinkStyle - Структура, с описанным стилем узла. Не обязательно
Возвращает:
Ссылка на текущий стиль. Позволяет писать так:

Использование:

   dtLinkStyle ().style ("bold")
                 .color ("red");

void dtNode | ( | const int | NodeN,
 |  | const char | Label[] = "",
 |  | const newDotNodeStyle | NodeStyle = CurrentNodeStyle,
 |  | const char | ExtraParams[] = ""
 | ) |  |

Функция рисования узла в dot.

Аргументы:
NodeN | - Номер узла
Label | - Текст, который надо разместить внутри
NodeStyle | - Структура, с описанным стилем узла. Если не указано, используется текущая(см. dtNodeStyle)
ExtraParams | - Дополнительные параметры(см. dotguide)
newDotNodeStyle & dtNodeStyle ( const newDotNodeStyle NodeStyle = CurrentNodeStyle )

Устанавливает текущий стиль узла.

Аргументы:
NodeStyle - Структура, с описанным стилем узла. Не обязательно
Возвращает:
Ссылка на текущий стиль. Позволяет писать так:

Использование:

   dtNodeStyle ().shape ("diamond")
                 .color ("red");

void dtRender | ( | const char | From[],
 |  | const char | To[] = "Graph.jpg",
 |  | const char | Type[] = "jpg",
 |  | const bool | Show = true
 | ) |  |

Функция генерирования изображения в dot.

Аргументы:
From | - Имя dot файла
To | - Имя выходного файла
Type | - Тип (jpg, bmp, ...)
Show | - Показывать файл после создания, или нет


Dotter: Пространства имен

  • Файлы
  • Пространства имен
  • Члены пространств имен
Пространства имен
Полный список документированных пространств имен.
DotterSystem Здесь хранятся некоторые системные данные


Dotter: Пространство имен DotterSystem

  • Пространства имен
  • Члены пространств имен
Переменные
Пространство имен DotterSystem
Системная

Здесь хранятся некоторые системные данные. Подробнее...

Переменные

FILE * | CurrentFile = NULL
Текущий файл
bool | CloseAtEnd = false
Закрывать файл после конца, или нет
newDotNodeStyle DefDotNode
Стандартный стиль узла.
newDotLinkStyle DefDotLink
Стандартный стиль ссылки.
newDotNodeStyle CurrentNodeStyle
Текущий стиль узла.
newDotLinkStyle CurrentLinkStyle
Текущий стиль ссылки.
int | Ind = 4
Отступ перед строкой в кол-ве пробелов.

Подробное описание

Здесь хранятся некоторые системные данные.


Dotter: Члены пространств имен

  • Пространства имен
  • Члены пространств имен
  • Указатель
  • Переменные
Полный список документированных членов простанств имен.
  • CloseAtEnd : DotterSystem
  • CurrentFile : DotterSystem
  • CurrentLinkStyle : DotterSystem
  • CurrentNodeStyle : DotterSystem
  • DefDotLink : DotterSystem
  • DefDotNode : DotterSystem
  • Ind : DotterSystem


Dotter: Члены пространств имен

  • Пространства имен
  • Члены пространств имен
  • Указатель
  • Переменные
  • CloseAtEnd : DotterSystem
  • CurrentFile : DotterSystem
  • CurrentLinkStyle : DotterSystem
  • CurrentNodeStyle : DotterSystem
  • DefDotLink : DotterSystem
  • DefDotNode : DotterSystem
  • Ind : DotterSystem


Dotter: Классы

  • Классы
  • Алфавитный указатель классов
  • Члены классов
Классы
Классы с их кратким описанием.
newDotLinkStyle | Структура связи
newDotNodeStyle | Структура узла


Dotter: Структура newDotLinkStyle

  • Классы
  • Алфавитный указатель классов
  • Члены классов
Открытые члены | Открытые атрибуты
Структура newDotLinkStyle
Главная

Структура связи. Подробнее...

#include <Dotter.h>

Полный список членов класса

Открытые члены

newDotLinkStyle & | style (const char Value[])
newDotLinkStyle & | color (const char Value[])

Открытые атрибуты

char | Style [30]
char | Color [30]

Подробное описание

Структура связи.

Данные класса

char newDotLinkStyle::Color[30]

Цвет линии. Значения:
1.английские названия цветов (см. Dotguide.pdf)
2.# и за ней как в html
3.три числа double = цвет / 256

char newDotLinkStyle::Style[30]

Стиль. Значения:
1.solid - обычный
2.dashed - пунктирный
3.dotted - точками
4.bold - жирный
5.invis - не рисуется

Объявления и описания членов структуры находятся в файле:
  • Dotter.h


Dotter: Структура newDotNodeStyle

  • Классы
  • Алфавитный указатель классов
  • Члены классов
Открытые члены | Открытые атрибуты
Структура newDotNodeStyle
Главная

Структура узла. Подробнее...

#include <Dotter.h>

Полный список членов класса

Открытые члены

newDotNodeStyle & | shape (const char Value[])
newDotNodeStyle & | color (const char Value[])
newDotNodeStyle & | fillcolor (const char Value[])
newDotNodeStyle & | fontcolor (const char Value[])
newDotNodeStyle & | style (const char Value[])

Открытые атрибуты

char | Shape [30]
char | Color [30]
char | FillColor [30]
char | FontColor [30]
char | Style [30]

Подробное описание

Структура узла.

Данные класса

char newDotNodeStyle::Color[30]

Цвет снаружи. Значения:
1.английские названия цветов (см. Dotguide.pdf)
2.# и за ней как в html
3.три числа double = цвет / 256

char newDotNodeStyle::FillColor[30]

Цвет внутри. Значения:
1.английские названия цветов (см. Dotguide.pdf)
2.# и за ней как в html
3.три числа double = цвет / 256

char newDotNodeStyle::FontColor[30]

Цвет букв. Значения:
1.английские названия цветов (см. Dotguide.pdf)
2.# и за ней как в html
3.три числа double = цвет / 256

char newDotNodeStyle::Shape[30]

Форма. Значения:
1. box - "коробка"(прямоугольник)
2. ellipse - эллипс
3. point - точка
4. egg - яйцо
5. triangle - треугольник
6. diamond - ромб
7. trapezium - трапеция
8. parallelogram - параллелограмм
9. hexagon - шестиугольник
10.octagon - восьмиугольник
11.invtriangle - перевёрнутый треугольник
12.invtrapezium - перевёрнутая трапеция
13.folder - папка
14.tab - закладка
15.component - деталь
15.box3d - 3D "коробка"(прямоугольник)
15.house - дом

char newDotNodeStyle::Style[30]

Стиль. Значения:
1.solid - обычный
2.dashed - пунктирный
3.dotted - точками
4.bold - жирный
5.invis - не рисуется
6.filled - заполнен
7.diagonals - диагонали
8.round - скруглённные углы

Объявления и описания членов структуры находятся в файле:
  • Dotter.h


Dotter: Алфавитный указатель классов

  • Классы
  • Алфавитный указатель классов
  • Члены классов
Алфавитный указатель классов
N
N
newDotNodeStyle
newDotLinkStyle
N


Dotter: Члены классов

  • Классы
  • Алфавитный указатель классов
  • Члены классов
  • Указатель
  • Переменные
Список всех документированных членов классов со ссылками на документацию по классу для каждого члена.
  • Color : newDotNodeStyle , newDotLinkStyle
  • FillColor : newDotNodeStyle
  • FontColor : newDotNodeStyle
  • Shape : newDotNodeStyle
  • Style : newDotLinkStyle , newDotNodeStyle


Dotter: Члены классов - Переменные

  • Классы
  • Алфавитный указатель классов
  • Члены классов
  • Указатель
  • Переменные
  • Color : newDotNodeStyle , newDotLinkStyle
  • FillColor : newDotNodeStyle
  • FontColor : newDotNodeStyle
  • Shape : newDotNodeStyle
  • Style : newDotLinkStyle , newDotNodeStyle


Dotter: Файлы

  • Список членов всех файлов
Файлы
Полный список документированных файлов.
Dotter.h [Исходные тексты] Библиотека для dot


Dotter: Файл Dotter.h

  • Список членов всех файлов
Классы | Пространства имен | Функции | Переменные
Файл Dotter.h

Библиотека для dot. Подробнее...

#include "stdio.h"
#include "windows.h"
#include "Dot\DotDef.h"

См. исходные тексты.

Классы

struct | newDotNodeStyle
Структура узла. Подробнее...
struct | newDotLinkStyle
Структура связи. Подробнее...

Пространства имен

namespace | DotterSystem

Здесь хранятся некоторые системные данные.

Функции

void | dtError (const char Message[])
Функция вывода ошибки.
void | dtBegin (FILE *To)
Начать запись dot графа.
void | dtBegin (const char Name[])
Открыть файл и начать запись dot графа.
void | dtEnd ()
Закончить описание dot графа.
void | dtOut (const char Str[])
Вывести строку в пригодном для Dot формате.
newDotNodeStyle & | dtNodeStyle (const newDotNodeStyle NodeStyle=CurrentNodeStyle)
Устанавливает текущий стиль узла.
newDotLinkStyle & | dtLinkStyle (const newDotLinkStyle LinkStyle=CurrentLinkStyle)
Устанавливает текущий стиль узла.
void | dtNode (const int NodeN, const char Label[]="", const newDotNodeStyle NodeStyle=CurrentNodeStyle, const char ExtraParams[]="")
Функция рисования узла в dot.
void | dtLink (const int FromNode, const int ToNode, const char Label[]="", const newDotLinkStyle LinkStyle=CurrentLinkStyle, const char ExtraParams[]="")
Функция рисования соединения узлов в dot.
void | dtRender (const char From[], const char To[]="Graph.jpg", const char Type[]="jpg", const bool Show=true)
Функция генерирования изображения в dot.

Переменные

FILE * | DotterSystem::CurrentFile = NULL
Текущий файл
bool | DotterSystem::CloseAtEnd = false
Закрывать файл после конца, или нет
newDotNodeStyle DotterSystem::DefDotNode
Стандартный стиль узла.
newDotLinkStyle DotterSystem::DefDotLink
Стандартный стиль ссылки.
newDotNodeStyle DotterSystem::CurrentNodeStyle
Текущий стиль узла.
newDotLinkStyle DotterSystem::CurrentLinkStyle
Текущий стиль ссылки.
int | DotterSystem::Ind = 4
Отступ перед строкой в кол-ве пробелов.

Подробное описание

Библиотека для dot.

copyright:
(C) Danila Baygushev


Dotter: Список членов всех файлов

  • Список членов всех файлов
  • Указатель
  • Функции
Список всех документированных членов файлов со ссылками на документацию.
  • dtBegin() : Dotter.h
  • dtEnd() : Dotter.h
  • dtError() : Dotter.h
  • dtLink() : Dotter.h
  • dtLinkStyle() : Dotter.h
  • dtNode() : Dotter.h
  • dtNodeStyle() : Dotter.h
  • dtOut() : Dotter.h
  • dtRender() : Dotter.h


Dotter: Список членов всех файлов

  • Список членов всех файлов
  • Указатель
  • Функции
  • dtBegin() : Dotter.h
  • dtEnd() : Dotter.h
  • dtError() : Dotter.h
  • dtLink() : Dotter.h
  • dtLinkStyle() : Dotter.h
  • dtNode() : Dotter.h
  • dtNodeStyle() : Dotter.h
  • dtOut() : Dotter.h
  • dtRender() : Dotter.h


Dotter: Исходный файл Dotter.h

  • Список членов всех файлов
Dotter.h
См. документацию.
00001 //===============================================================================
00006 //===============================================================================
00007 #ifndef DOTTER__
00008 #define DOTTER__
00009
00010 #include "stdio.h"
00011 #include "windows.h"
00012
00013 //===============================================================================
00016 //===============================================================================
00017
00018 //==============================================================================
00019 #include "Dot\DotDef.h"  //Auto-gen file. Creates autamatically.
00020 //===============================================================================
00021
00022 //===============================================================================
00025 //===============================================================================
00026 struct newDotNodeStyle
00027 {
00028     char Shape     [30];
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047     char Color     [30];
00048
00049
00050
00051
00052     char FillColor [30];
00053
00054
00055
00056
00057     char FontColor [30];
00058
00059
00060
00061
00062     char Style     [30];
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072     newDotNodeStyle ();
00073
00074     newDotNodeStyle& shape     (const char Value[]);
00075     newDotNodeStyle& color     (const char Value[]);
00076     newDotNodeStyle& fillcolor (const char Value[]);
00077     newDotNodeStyle& fontcolor (const char Value[]);
00078     newDotNodeStyle& style     (const char Value[]);
00079 };
00080
00081 //------------------------------------------------------------------------------
00082
00083 newDotNodeStyle::newDotNodeStyle ()
00084 {
00085     strcpy (Shape,     "ellipse");
00086     strcpy (Color,     "black");
00087     strcpy (FillColor, "black");
00088     strcpy (FontColor, "black");
00089     strcpy (Style,     "solid");
00090 }
00091
00092 newDotNodeStyle& newDotNodeStyle::shape     (const char Value[])
00093 {
00094     strcpy (Shape, Value);
00095
00096     return *this;
00097 }
00098 newDotNodeStyle& newDotNodeStyle::color     (const char Value[])
00099 {
00100     strcpy (Color, Value);
00101
00102     return *this;
00103 }
00104 newDotNodeStyle& newDotNodeStyle::fillcolor (const char Value[])
00105 {
00106     strcpy (FillColor, Value);
00107
00108     return *this;
00109 }
00110 newDotNodeStyle& newDotNodeStyle::fontcolor (const char Value[])
00111 {
00112     strcpy (FontColor, Value);
00113
00114     return *this;
00115 }
00116 newDotNodeStyle& newDotNodeStyle::style     (const char Value[])
00117 {
00118     strcpy (Style, Value);
00119
00120     return *this;
00121 }
00122
00123 //==============================================================================
00124
00125 //===============================================================================
00128 //===============================================================================
00129 struct newDotLinkStyle
00130 {
00131     char Style [30];
00132
00133
00134
00135
00136
00137
00138     char Color [30];
00139
00140
00141
00142
00143     newDotLinkStyle ();
00144
00145     newDotLinkStyle& style (const char Value[]);
00146     newDotLinkStyle& color (const char Value[]);
00147 };
00148
00149 //------------------------------------------------------------------------------
00150
00151 newDotLinkStyle::newDotLinkStyle ()
00152 {
00153     strcpy (Color, "black");
00154     strcpy (Style, "solid");
00155 }
00156
00157 newDotLinkStyle& newDotLinkStyle::style (const char Value[])
00158 {
00159     strcpy (Style, Value);
00160
00161     return *this;
00162 }
00163 newDotLinkStyle& newDotLinkStyle::color (const char Value[])
00164 {
00165     strcpy (Color, Value);
00166
00167     return *this;
00168 }
00169
00170 //==============================================================================
00171
00172 //===============================================================================
00175 //===============================================================================
00176 namespace DotterSystem
00177 {
00178     FILE* CurrentFile = NULL;
00179     bool CloseAtEnd = false;
00180
00181     newDotNodeStyle DefDotNode;
00182     newDotLinkStyle DefDotLink;
00183
00184     newDotNodeStyle CurrentNodeStyle;
00185     newDotLinkStyle CurrentLinkStyle;
00186
00187     int Ind = 4;
00188 };
00189 using namespace DotterSystem;
00190
00191 //==============================================================================
00192
00193 //===============================================================================
00198 //===============================================================================
00199 void dtError (const char Message []);
00200
00201 //==============================================================================
00202
00203 //===============================================================================
00208 //===============================================================================
00209 void dtBegin (FILE* To);
00210
00211 //===============================================================================
00216 //===============================================================================
00217 inline void dtBegin (const char Name []);
00218
00219 //===============================================================================
00222 //===============================================================================
00223 void dtEnd  ();
00224
00225 //===============================================================================
00228 //===============================================================================
00229 void dtOut (const char Str []);
00230
00231 //==============================================================================
00232
00233 //===============================================================================
00248 //===============================================================================
00249 newDotNodeStyle& dtNodeStyle  (const newDotNodeStyle NodeStyle = CurrentNodeStyle);
00250
00251 //===============================================================================
00266 //===============================================================================
00267 newDotLinkStyle& dtLinkStyle  (const newDotLinkStyle LinkStyle = CurrentLinkStyle);
00268
00269 //===============================================================================
00277 //===============================================================================
00278 void dtNode  (const int NodeN, const char Label [] = "", const newDotNodeStyle NodeStyle = CurrentNodeStyle, const char ExtraParams [] = "");
00279
00280 //===============================================================================
00289 //===============================================================================
00290 void dtLink (const int FromNode, const int ToNode, const char Label [] = "", const newDotLinkStyle LinkStyle = CurrentLinkStyle, const char ExtraParams [] = "");
00291
00292 //==============================================================================
00293
00294 //===============================================================================
00302 //===============================================================================
00303 void dtRender (const char From [], const char To [] = "Graph.jpg", const char Type [] = "jpg", const bool Show = true);
00304
00305 //==============================================================================
00306
00307 void dtError (const char Message [])
00308 {
00309     throw Message;
00310
00311     printf ("==Dotter error!==\n");
00312     printf ("Message = %s\n");
00313
00314     throw "Dotter error!!!"; //Вдруг кто-то ловит. )
00315
00316     system ("pause");
00317
00318     exit (0);
00319 }
00320
00321 //==============================================================================
00322
00323 void dtBegin (FILE* To)
00324 {
00325     if (!To) dtError ("No output file");
00326     if (CurrentFile) dtError ("Close previous file first");
00327     CurrentFile = To;
00328
00329     fprintf (CurrentFile, "digraph DotGraph\n");
00330     fprintf (CurrentFile, "{\n");
00331 }
00332
00333 inline void dtBegin (const char Name [])
00334 {
00335     FILE* To = NULL;
00336     To = fopen (Name, "w");
00337
00338     CloseAtEnd = true;
00339
00340     dtBegin (To);
00341 }
00342
00343 void dtEnd  ()
00344 {
00345     if (!CurrentFile) dtError ("No output file");
00346
00347     fprintf (CurrentFile, "}\n");
00348
00349     if (CloseAtEnd)
00350     {
00351         CloseAtEnd = false;
00352
00353         fclose (CurrentFile);
00354     }
00355
00356     CurrentFile = NULL;
00357 }
00358
00359 void dtOut (const char Str [])
00360 {
00361     if (!CurrentFile) dtError ("No output file");
00362
00363     for (int i = 0; Str [i] != 0; i ++)
00364     {
00365         switch (Str [i])
00366         {
00367             case '\n':
00368             {
00369                 fprintf (CurrentFile, "\\n");
00370                 break;
00371             }
00372             case '\r':
00373             {
00374                 fprintf (CurrentFile, "\\r");
00375                 break;
00376             }
00377             case '\\':
00378             {
00379                 fprintf (CurrentFile, "\\\\");
00380                 break;
00381             }
00382             case '"':
00383             {
00384                 fprintf (CurrentFile, "\\\"");
00385                 break;
00386             }
00387
00388             default:
00389             {
00390                 fprintf (CurrentFile, "%c", Str [i]);
00391                 break;
00392             }
00393
00394         }
00395     }
00396 }
00397
00398 //==============================================================================
00399
00400 newDotNodeStyle& dtNodeStyle  (const newDotNodeStyle NodeStyle)
00401 {
00402     if (!CurrentFile) dtError ("No output file");
00403
00404     CurrentNodeStyle = NodeStyle;
00405
00406     return CurrentNodeStyle;
00407 }
00408 newDotLinkStyle& dtLinkStyle  (const newDotLinkStyle LinkStyle)
00409 {
00410     if (!CurrentFile) dtError ("No output file");
00411
00412     CurrentLinkStyle = LinkStyle;
00413
00414     return CurrentLinkStyle;
00415 }
00416
00417 void dtNode (const int NodeN, const char Label [], const newDotNodeStyle NodeStyle, const char ExtraParams [])
00418 {
00419     if (!CurrentFile) dtError ("No output file");
00420
00421     for (int i = 0; i < DotterSystem::Ind; i ++)
00422     {
00423         fprintf (CurrentFile, " ");
00424     }
00425
00426     fprintf (CurrentFile, "Node%d ", NodeN);
00427     fprintf (CurrentFile, "[");
00428
00429 #ifndef BeautifulDot
00430     fprintf (CurrentFile, "shape=\"%s\", ",     NodeStyle.Shape);
00431     fprintf (CurrentFile, "color=\"%s\", ",     NodeStyle.Color);
00432     fprintf (CurrentFile, "fontcolor=\"%s\", ", NodeStyle.FontColor);
00433     fprintf (CurrentFile, "fillcolor=\"%s\", ", NodeStyle.FillColor);
00434     fprintf (CurrentFile, "style=\"%s\", ",     NodeStyle.Style);
00435     fprintf (CurrentFile, "weight=\"1\", ");
00436 #else
00437     if (strcmp (NodeStyle.Shape,     DefDotNode.Shape)     != 0) fprintf (CurrentFile, "shape=\"%s\", ",     NodeStyle.Shape);
00438     if (strcmp (NodeStyle.Color,     DefDotNode.Color)     != 0) fprintf (CurrentFile, "color=\"%s\", ",     NodeStyle.Color);
00439     if (strcmp (NodeStyle.FontColor, DefDotNode.FontColor) != 0) fprintf (CurrentFile, "fontcolor=\"%s\", ", NodeStyle.FontColor);
00440     if (strcmp (NodeStyle.FillColor, DefDotNode.FillColor) != 0) fprintf (CurrentFile, "fillcolor=\"%s\", ", NodeStyle.FillColor);
00441     if (strcmp (NodeStyle.Style,     DefDotNode.Style)     != 0) fprintf (CurrentFile, "style=\"%s\", ",     NodeStyle.Style);
00442 #endif
00443
00444     fprintf (CurrentFile, "label=\"");
00445     dtOut (Label);
00446     fprintf (CurrentFile, "\"");
00447
00448     if (strcmp (ExtraParams, "") != 0) fprintf (CurrentFile, ", %s", ExtraParams);
00449
00450     fprintf (CurrentFile, "];\n");
00451 }
00452
00453 void dtLink (const int FromNode, const int ToNode, const char Label [], const newDotLinkStyle LinkStyle, const char ExtraParams [])
00454 {
00455     if (!CurrentFile) dtError ("No output file");
00456
00457     for (int i = 0; i < DotterSystem::Ind; i ++)
00458     {
00459         fprintf (CurrentFile, " ");
00460     }
00461
00462     fprintf (CurrentFile, "Node%d -> Node%d ", FromNode, ToNode);
00463     fprintf (CurrentFile, "[");
00464
00465 #ifndef BeautifulDot
00466     fprintf (CurrentFile, "color=\"%s\", ", LinkStyle.Color);
00467     fprintf (CurrentFile, "style=\"%s\", ", LinkStyle.Style);
00468     fprintf (CurrentFile, "weight=\"1\", ");
00469 #else
00470     if (strcmp (LinkStyle.Color, DefDotLink.Color) != 0) fprintf (CurrentFile, "color=\"%s\", ", LinkStyle.Color);
00471     if (strcmp (LinkStyle.Style, DefDotLink.Style) != 0) fprintf (CurrentFile, "style=\"%s\", ", LinkStyle.Style);
00472 #endif
00473
00474     fprintf (CurrentFile, "label=\"");
00475     dtOut (Label);
00476     fprintf (CurrentFile, "\"");
00477
00478     if (strcmp (ExtraParams, "") != 0) fprintf (CurrentFile, ", %s", ExtraParams);
00479
00480     fprintf (CurrentFile, "];\n");
00481 }
00482
00483 //==============================================================================
00484
00485 void dtRender (const char From [], const char To [], const char Type [], const bool Show)
00486 {
00487     const int ComandSize = 100;
00488
00489     char Comand [ComandSize] = "";
00490
00491     const int OtherSymbols = 14;
00492
00493     if (strlen (__DOT__) + strlen (From) + strlen (To) + strlen (Type) + OtherSymbols >= ComandSize) dtError ("Names too long!");
00494
00495     sprintf (Comand, "%s -T%s %s -o %s", __DOT__, Type, From, To);
00496
00497     system (Comand);
00498
00499     if (Show)
00500     {
00501         strcpy (Comand, "");
00502
00503         sprintf (Comand, "start %s", To);
00504
00505         system (Comand);
00506     }
00507 }
00508
00509 //==============================================================================
00510
00511 #endif


Dotter: Cписок членов класса

  • Классы
  • Алфавитный указатель классов
  • Члены классов
newDotLinkStyle Cписок членов класса
Полный список членов класса newDotLinkStyle, включая наследуемые из базового класса
Color | newDotLinkStyle
color(const char Value[]) (определено в newDotLinkStyle) | newDotLinkStyle
newDotLinkStyle() (определено в newDotLinkStyle) | newDotLinkStyle
style(const char Value[]) (определено в newDotLinkStyle) | newDotLinkStyle
Style | newDotLinkStyle


Dotter: Cписок членов класса

  • Классы
  • Алфавитный указатель классов
  • Члены классов
newDotNodeStyle Cписок членов класса
Полный список членов класса newDotNodeStyle, включая наследуемые из базового класса
Color | newDotNodeStyle
color(const char Value[]) (определено в newDotNodeStyle) | newDotNodeStyle
fillcolor(const char Value[]) (определено в newDotNodeStyle) | newDotNodeStyle
FillColor | newDotNodeStyle
FontColor | newDotNodeStyle
fontcolor(const char Value[]) (определено в newDotNodeStyle) | newDotNodeStyle
newDotNodeStyle() (определено в newDotNodeStyle) | newDotNodeStyle
shape(const char Value[]) (определено в newDotNodeStyle) | newDotNodeStyle
Shape | newDotNodeStyle
style(const char Value[]) (определено в newDotNodeStyle) | newDotNodeStyle
Style | newDotNodeStyle