Клуб API Карт

В Google Chrome 46 не рисуется заливка у Polygon

Дмитрий Новиков
17 октября 2015, 11:02

Проблема у меня в обновленном Chrome (версия 46) и у некоторых коллег. У другого (версия Chrome 45) всё нормально. Узнал о проблеме вчера в середине дня. Воспроизвести легко: https://tech.yandex.ru/maps/jsbox/2.1/polygon. У меня левый многоугольник в этом примере - без заливки. При этом в Firefox, которым пользуюсь как вспомогательным браузером, всё нормально.

14 комментариев
Подписаться на комментарии к посту

А можно немного подробностей - какая операционка и видеокарта. На абстрактом железе в 46 хроме все нормально.

Дмитрий Новиков
17 октября 2015, 20:23

У меня ноутбук на Windows 8,1, Intel HD Graphics 4000. У коллег - десктопы, ОС скорее всего Windows XP, какие видеокарты - не имею представления. Какое значение тут может иметь видеокарта?

it-otdel@dverei-deshevle.net
19 октября 2015, 09:23

windows 7 корпоративная, Intel HD Graphics
не отображется в хроме последнем, в мозиле все нормально 
причем при увеличении зума карты заливка появляется 

У меня то же самое - полигон не заполняется цветом, рисуется только рамка:
 geoPolygon.options.set({

                strokeColor: #00ff00,

                fillColor: #00ff00,

 });

Windows 7 Home Расширенная, видеокарта - ATI Mobility Radeon HD 5650

По ссылке https://tech.yandex.ru/maps/jsbox/2.1/polygon левый полигон также без заливки.

Что будет если открыть пример http://jsfiddle.net/sm9g3pb3/ и немного левый полигон потаскать?

Что будет если убрать второй контур - http://jsfiddle.net/sm9g3pb3/2/

А если перевести в SVG? - http://jsfiddle.net/sm9g3pb3/4/

 

А в идеале проверьте, что globalCompositeOperation работает одинаково в ФФ и Хроме - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation

 

Что будет если открыть пример http://jsfiddle.net/sm9g3pb3/ и немного левый полигон потаскать?

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

 

Что будет если убрать второй контур - http://jsfiddle.net/sm9g3pb3/2/

 У левого и правого полигонов есть заливка!


А если перевести в SVG? - http://jsfiddle.net/sm9g3pb3/4/

У левого полигона нет заливки.

globalCompositeOperation пока не проверял. 

XOR операция сломана. Именно она используется АПИ при рендеринге многоконтурных полигнов в режиме fillRule:evenOdd

Варианта решения 2:

1. Не использоваться многоконтурные полигоны

2. Не использовать fillRule:evenOdd(полигоны с дырками)

В принципе в картографический кейсах это особо не и нужно. К сожалению поломка идет на уровне браузера, поправить не можем. Будем ждать 47 хрома.

Дмитрий Новиков
19 октября 2015, 17:41

Можете уточнить, что за XOR-операция? К сожалению, и без использования внутреннего контура заливка не рисуется, так что вариант 1 не работает.

Дмитрий Новиков
19 октября 2015, 17:45

Прошу прощения. Я в своем коде в аругументе для внутреннего кода использовал [] (типа, пустой контур). Но если исключить этот аргумент вообще, то всё рисуется! Мне внутренние контуры никак не нужны. Спасибо за Ваши ответы!

http://jsfiddle.net/sm9g3pb3/2/ - у меня в 46 хроме оба полигона залиты правильно. Возможно у вас полигон с самопересечением?

XOR операция используется для отрисовки "дырок" в полигоне, и ее(и не только ее) сломали в Хроме. Ссылка на багтрекер в конце топика.

Одноконтурные (и простые) полигоны или полигоны с fillRule:'nonZero' должны рисоваться без проблем.

Дмитрий Новиков
19 октября 2015, 17:47

Ок, ясно! Но это уже выше моего понимания, так как рисованием на холсте напрямую не занимался )))

Спасибо большое за ответы! 

(+1)

В 47 бете хрома проблема решена... так что остается подождать релиза...