d3 Контекстная диаграмма Размытие по Гауссу

Я создаю интерактивное приложение d3, одна часть интерфейса которого очень похожа на пример очистки фокуса/контекста Бостока:

http://bl.ocks.org/mbostock/1667367

Пока все работает нормально, но вот что я хочу сделать. Я хочу взять контекстную область (нижняя диаграмма) и размыть по Гауссу области на фоне кисти (и путь диаграммы svg и ось x за ней), которые не выбраны экстентом кисти. В принципе, я пытаюсь создать эффект, подобный этому:

http://bl.ocks.org/mbostock/4349545

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

Мое решение состояло в том, чтобы нарисовать пару прямоугольников слева и справа от экстента кисти и стилизовать эти прямоугольники с непрозрачностью заливки и т. Д., Что создает эффект «ослабления акцента», аналогичный тому примеру с ручками кисти.

введите здесь описание изображения

Однако для истинного размытия по Гауссу это кажется более сложным. Я могу применить SVG-фильтр к самим областям, но он просто размывает края прямоугольников (он не применяет эффект размытия ко всему, что видно сквозь них). Мое следующее решение состояло в том, чтобы попытаться получить BackgroundImage с холста и размыть его, что-то вроде того, что вы видите здесь:

http://www.w3.org/TR/SVG/filters.html#AccessingBackgroundImage

Но хоть убей меня, я не могу заставить это работать. Поддерживается ли BackgroundImage из браузера? Нужно ли мне указывать d3, чтобы он повторно вызывал некоторые элементы моей страницы, чтобы перерисовать элементы svg (поскольку они загружаются динамически) внутри моего обратного вызова кисти? Есть ли вообще другой способ сделать это?


person Matt M    schedule 25.04.2013    source источник


Ответы (1)


Фоновое изображение поддерживается только в IE10 и Opera, так что то, что вы делаете, будет работать и в Windows 8! Очевидный обходной путь — подтянуть исходные фоновые объекты к фильтру через feImage. Это работает в IE10, Opera и Webkit, но IE10+Opera обрабатывает x, y координаты, предоставляемые feImage для внутренних ссылок на контент, отличные от Webkit.

Обходной путь следующего уровня — сделать весь наложенный слой в эффектах фильтра и установить фильтр в группе контента. Это вполне возможно (но может быть немного сложно заставить это работать в d3)

Для вдохновения: http://codepen.io/mullany/pen/mnBqK

person Michael Mullany    schedule 25.04.2013
comment
Похоже, что webkit поддерживает внутренние ссылки документа в feImage (<feImage xlink:href="#someElm"/>), но с каким-то странным/глючным смещением. - person Erik Dahlström; 26.04.2013
comment
см. эту ошибку для получения подробной информации об этом Эрике - было бы неплохо иметь вторую пару глаз code.google.com/p/chromium/issues/detail?id=234002 - person Michael Mullany; 26.04.2013