Программирование на интерфейс говорит: «Мне нужна эта функциональность, и мне все равно, откуда она».
Рассмотрим (на Java) интерфейс List
по сравнению с ArrayList
и LinkedList
конкретных классов. Если все, о чем я забочусь, это то, что у меня есть структура данных, содержащая несколько элементов данных, к которым я должен обращаться через итерацию, я бы выбрал List
(и это 99% времени). Если я знаю, что мне нужно вставить / удалить постоянное время с любого конца списка, я бы выбрал конкретную реализацию LinkedList
(или, более вероятно, использовать интерфейс Queue ). Если я знаю, что мне нужен произвольный доступ по индексу, я бы выбрал конкретный класс ArrayList
.
Вы попадаете в последний параграф в этой части спецификации SVG
Объект ключевого словаBoundingBox не следует использовать, когда геометрия применимого элемента имеет без ширины или без высоты, например, в случае горизонтальной или вертикальной линии, даже если линия имеет фактическую толщину при просмотре из-за отсутствия ненулевой ширины хода, так как ширина штриха игнорируется для вычисления ограничивающей коробки. Если геометрия применимого элемента не имеет ширины или высоты, а объектBoundingBox указан, то данный эффект (например, градиент или фильтр) будет проигнорирован.
blockquote>objectBoundingBox является значением по умолчанию для gradientUnits, поэтому вам нужно использовать gradientUnits = "userSpaceOnUse", а затем отрегулировать значения, подходящие для разных систем координат.
Роберт Лонгсон дает отличное объяснение. Но иногда userSpaceOnUse
является болью, потому что он распространяет интерполяцию по всему холсту, а не только на строку.
Вместо этого вы могли бы добавить незначительную сумму к значениям, чтобы обеспечить размер bbox не равен нулю.
Например,
<line x1="40" y1="210" x2="460" y2="210.001" stroke="url(#grad1)" stroke-width="1" />
будет рисовать прямую линию с градиентом.
Предполагая, что вам не нужна какая-либо точность, вы можете изменить линию на заполненный путь ниже
<path d='M 40 209.5 L 460 209.5 L 460 210.5 L 40 210.5' fill='url(#grad1)' />
или, альтернативно, на заполненный прямоугольник, как показано ниже
<rect x=40 y=209.5 width=420 height=1 fill='url(#grad1)' />
Также интересно отметить, что эта проблема затрагивает только вертикальные и горизонтальные линии. Наклонная линия отображается правильно.