Как обрезать контент, находящийся вне viewBox?

Есть ли функция или способ обрезать путь, который находится за пределами окна просмотра, а не просто скрыть его?

Я использую svg-edit, который имеет viewbox, область холста. Все нарисованное вне этого холста скрыто. Однако, когда выходные данные редактора собираются и вставляются в графический редактор, такой как Inkscape, появляется весь чертеж. Я хочу, чтобы рисунок, находящийся вне области просмотра, полностью вырезался из вывода редактора. Так, например, если у меня есть круг, который наполовину находится за пределами холста, то результат работы редактора будет полукругом, а не весь круг, а только половина скрытого.

Я хочу изменить геометрию самого предметного пути, а не просто скрыть его от глаз.

Я делаю модификацию svg-edit: http://code.google.com/p/svg-edit/

1 ответ

Решение

Один из способов сделать это - применить clip-path в корневой элемент SVG.

Если вы хотите, это может быть простая прямоугольная область или другая более сложная форма, как в примере ниже:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" 
     xmlns:xlink="http://www.w3.org/1999/xlink"     
     viewBox="-100 -100 300 300"
     clip-path="url(#clip)">
  <defs>
    <clipPath id="clip">
      <rect width="100" height="100" rx="10"/>
      <path d="M40 99l10 11 10 -11z"/> 
    </clipPath>
  </defs>

  <rect id="background" width="120" height="120" fill="slateblue"/>
  <image xlink:href="images/man.png" width="100" height="110" 
         preserveAspectRatio="xMidYMax meet"/>
</svg>

Посмотреть это онлайн здесь.

В вашем случае вы, вероятно, хотели бы только один <rect> внутри <clipPath> элемент, который имел те же размеры, что и viewBox.

Другие вопросы по тегам