Skip to content

RU Пакетная компоновка

mingun edited this page Jun 18, 2014 · 3 revisions

ВикиСправка по APIКомпоновкиПакетная компоновка
English | Русский

Реализует алгоритм иерархического связывания рёбер Данни Холтена. Для каждой входной связи вычисляется путь по дереву вверх по иерархии до ближайшего общего родителя, а потом вниз до целевого узла. Затем полученная последовательность узлов может использоваться в сочетании с другими иерархическими компоновками, например, кластерной для генерирования пучка сплайнов между узлами:

Пакетная компоновка

В качестве примера можно посмотреть на визуализацию программных зависимостей.

# d3.layout.bundle()

Конструирует новую пакетную компоновку по умолчанию. На текущий момент пакетная компоновка не хранит состояния, поэтому имеет только конфигурацию по умолчанию. Возвращённый объект компоновки является одновременно объектом и функцией. Это значит, что вы можете вызвать компоновку как и любую другую функцию и в тоже время компоновка имеет дополнительные методы, изменяющие её поведение. Подобно другим классам в D3, компоновки следуют шаблону цепочечных методов, по которому методы-установщики возвращают саму компоновку, что позволяет выполнять несколько сеттеров в лаконичном выражении.

# bundle(links)

Вычисляет пакетную компоновку на указанном массиве связей links, возвращает вычисленный путь из источника в цель через наименьшего общего предка. Каждая входная связь должна иметь два атрибута:

  • source — исходный узел.
  • target — целевой узел.

Кроме того, каждый узел должен иметь один атрибут:

  • parent — родительский узел.

Это подмножество полей, генерируемых иерархическими компоновками. Возвращаемое значение компоновки является массивом путей, где каждый путь представляется массивом узлов. Таким образом, пакетная компоновка непосредственно не вычисляет базисные сплайны; вместо этого она возвращает массив узлов, который неявно представляет контрольные точки сплайна. Вы можете использовать этот массив в сочетании с d3.svg.line или d3.svg.line.radial для самостоятельного генерирования сплайнов. Например, если вы используете кластерную компоновку:

var cluster = d3.layout.cluster()
    .size([2 * Math.PI, 500]);

Подходящий генератор линий для иерерхических связывания рёбер может быть таким:

var line = d3.svg.line.radial()
    .interpolate("bundle")
    .tension(0.85)
    .radius(function(d) { return d.y; })
    .angle(function(d) { return d.x; });

Пакетная компоновка спроектирована для совместной работы с режимом интерполяции «bundle» генератора линий, хотя с технической точки зрения можно использовать любую функцию интерполяции или генератор фигур. Параметр силы холтеновского пакета влияет на натяжение линии.

Clone this wiki locally