Z-порядок SVG с непрозрачностью ‹ 1

Я создаю изображение SVG (карта дерева с эллипсами для узлов), где я хочу соединить эллипсы линиями, но я хочу, чтобы линии начинались с краев эллипсов. Поскольку вычислить, где падают края и начать или закончить линии именно там, очень сложно, я рисую линии из центров эллипсов и ищу способ наложить эллипс на линию, чтобы он маскировал перекрывающаяся часть, создающая впечатление, что линии начинаются только на краю эллипса. Поскольку SVG реализует z-порядок через порядок элементов, если я сначала создам соединительные линии, а затем эллипсы, это сработает, за исключением того, что...

... Я хочу, чтобы эллипсы были синими или красными с fill-opacity="0.15", но когда я это делаю, линии просвечивают. Конечно, имеет смысл, что что-то с низкой непрозрачностью не может полностью замаскировать то, что оно скрывает, но мне трудно понять, как я могу получить желаемый эффект. Я нашел одно рабочее решение: для каждого эллипса, который мне нужен, я сначала создаю эллипс того же размера и положения с белой заливкой и непрозрачностью 1, и это полностью маскирует соединительную линию там, где они перекрываются. Затем я накладываю на белый эллипс тот эллипс, который действительно хочу визуализировать, с синей или красной заливкой и непрозрачностью 0,15. Это выглядит так, как я хочу, но это кажется неуклюжим. Есть ли изящное решение, которое я пропускаю?


person obdurodon    schedule 08.09.2012    source источник
comment
Это звучит нелепо. Зачем нужен полупрозрачный фон? Вам нужны другие элементы или фон, чтобы показать через ваши узлы? Или нужен только цвет?   -  person methodofaction    schedule 09.09.2012


Ответы (2)


Вы можете использовать отсечение или маскирование.

Нарисуйте линии полностью, но прикрепите их ко всему, кроме эллипсов.

http://www.w3.org/TR/SVG/masking.html

person Has QUIT--Anony-Mousse    schedule 08.09.2012

Вам нужно получить цвет после рендеринга fill-opacity на белом фоне.

Сделайте снимок экрана вашего SVG, откройте его в программе редактирования графики, такой как Photoshop, используйте инструмент «Пипетка», чтобы проверить отображаемый цвет, и скопируйте шестнадцатеричное значение. Затем используйте его как цвет заливки с fill-opacity="1"

person methodofaction    schedule 08.09.2012