Это для записи объекта графа BGL в поток вывода в формате графвиза точка
AT&T chartviz
чтобы нарисовать картину с хорошим макетом.
Первая версия с двумя параметрами запишет граф в
std::ostream где каждая вершина представлена своей численной вершиной
ID. Если у пользователей есть внутренние или внешние свойства для каждой вершины
в графе, вторая версия выше предоставляет способ печати этих
свойства в файл формата графвиза. Например, если каждая вершина
в графе есть свой ярлык через объект карты свойств имя,
пользователи могут использовать вторую версию:
write_graph(out, g, make_label_writer(name));
Функция утилиты make_label_writer возвращает предопределенное
PropertyWriter для
вертикальные этикетки. Аналогично, третий
версия и четвертая версия требуют вершины
PropertyWriter, edge
PropertyWriter, и граф
PropertyWriter,
соответственно.
Две перегрузки write_graphviz_dp будут излучать
все свойства, хранящиеся в dynamic_properties
объект, тем самым сохраняя свойства, которые были прочитаны
через двойную функцию read_graphviz. С этими
перегрузка, node_id - это название карты свойств,
сохраняет идентификаторы каждого узла для использования в выводе (если он хранится в
dynamic_properties структура); альтернативно, можно
предоставить карту произвольного свойства для vertex_id, давая
Идентификаторы вершин. В этом случае имя
node_id все еще должно быть поставлено для подавления его
вывод как этикетка вершин.
PropertyWriter используется в функции write_graphviz
печати вершин, ребер или графических свойств. Существует два типа
PropertyWriter. Один для вершины или края. Другой для графа.
Таким образом, пользователи могут легко расширить write_graphviz функция
создав свой собственный PropertyWriter только.
A PropertyWriter
для вершин или ребер - это фанктор, который можно назвать двумя параметрами:
std::ostream и либо вершина, либо реберный дескриптор. Он должен выводить
пара скобок с серией зажимов "name=value " внутри.
Каждое задание должно быть разделено либо с пространством, с коммой, либо с полуколоном.
Следующий фанктор, предоставленный BGL, является примером PropertyWriter для
вершины или края. Он используется для печати этикетки каждой вершины или края.
Предоставляется функция для удобного создания этого писателя:
template < class Name >
label_writer<Name>
make_label_writer(Name n);
A PropertyWriter
для графов - это фанктор, который называется одним параметром типа
std::ostream и должен напечатать ряд свойств графа. Следующие
выдержка кода является примером PropertyWriter для графа:
struct sample_graph_writer {
void operator()(std::ostream& out) const {
out << "graph [bgcolor=lightgrey]" << std::endl;
out << "node [shape=circle color=white]" << std::endl;
out << "edge [style=dashed]" << std::endl;
}
};
}
Существует класс default_writer, который может быть использован как
vertex/edge и графа собственность писателя, и ничего не делает. Это полезно, когда
должны быть написаны только реберные свойства, но интерфейс функции также требует
vertex property Writer.
Параметры
OUT: std::ostream& out
Стандарт std::ostream объект.
IN: VertexAndEdgeListGraph& g
Ориентированный или ненаправленный граф. Тип графа должен быть моделью
VertexAndEdgeListGraph. В большинстве случаев
Граф должен иметь внутреннюю карту свойств vertex_index.
IN: VertexPropertyWriter vpw
Functor, который модели PropertyWriter напечатать
свойства вершины. Default: default_writer()
IN: EdgePropertyWriter epw
Functor, который модели PropertyWriter напечатать
свойства края. Default: default_writer()
IN: GraphPropertyWriter epw
Functor, который модели PropertyWriter напечатать
свойства графа. Default: default_writer()
IN: dynamic_properties& dp
Содержит все вершины и реберные свойства, которые должны быть
Выпущено писателем GraphViz.
IN: const std::string& node_id
Название карты свойств, которая предоставляет идентификаторы для
вершины в графе. Default: "node_id"
IN: VertexID vertex_id
Карта свойств, на которой модели Readable Property Map, ключевым типом которой является вершинный дескриптор графа, и тип ценности которого может быть записан в поток. Значение должно быть уникальным дескриптором для каждой вершины, и будет использоваться для обозначения каждого узла в файле Graphviz (он будет удален должным образом для вывода Graphviz). Default: Если нет объекта dynamic_properties, get(vertex_index, g). В противном случае, карта динамического свойства, которая обращается к карте свойств в dp, имя которой дается параметром node_id.
Пример
Этот пример демонстрирует использование интерфейса BGL-Graphviz для записи
a График BGL в файл формата Graphviz.
Статья Boost Graph Library: write graphviz раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.