Estoy tratando de encontrar una manera de restar una forma de otra en SVG, creando un agujero en el medio o un bocado de los lados de la misma. Como especie de un trazado de recorte, pero en vez de mostrar la intersección, quiero mostrar una de las partes fuera de la intersección. Una solución involucrados con Adobe Flex, pero no sé cómo aplicarlo correctamente. Entiendo que hay una manera de hacer esto en Inkscape utilizando booleano operaciones de trazado, pero quiero mantener el círculo de los elementos de la forma en que son, en lugar de convertirlas en elementos de la ruta.
<defs>
<subtractPath id="hole">
<circle r="50" cx="100" cy="100" />
</subtractPath>
</defs>
<circle id="donut" r="100" cx="100" cy="100" subtract-path="url(#hole)" />
Una máscara es lo que quieres. Para crear un
<mask>
, hacer las cosas que usted desea mantener el blanco. Las cosas que usted quiere ser invisible hacer negro. Colores entre resultará en la translucidez.Por lo que la resultante SVG es similar a su pseudo-marcado y se parece a esto:
HTML:
Estamos llenando la máscara con un rectángulo blanco, y a continuación, ponemos un círculo negro donde queremos que el orificio.
<circle id="donut" r="100" cx="100" cy="100" mask="url(#hole)" fill="white" />
El truco es usar relleno de la regla para controlar la visualización de un clip-path. Un (plaza) donut ejemplo sería
Que utiliza el relleno de la regla de la propiedad de las formas para quitar el cuadrado interior – usted puede ajustar que hacer con trazados curva para crear un círculo como se requiere.
Una vez que tienes el básico de trazado de recorte crea, puede crear un trazado de recorte fuera de ella – ver esta entrada MDN para obtener información sobre el clip-path.
Dos respuestas sugieren que (1) el uso de un <máscara> o (2) utilizar el «relleno de la regla=evenodd» atributo para restar una forma B de una forma Un (Un ∖ B).
Tanto las respuestas que se sugieren a resolver el «agujero en la media» (B ⊆ A) parte de la pregunta, pero sólo el máscara enfoque es una solución razonable para el «bocado del lado de la» parte (B ⊈ A). El uso de la evenodd de relleno de la regla quiere decir que las dos formas son tratados por igual, de modo que la parte de la segunda forma que no se intersectan con la primera de ellas será parte del resultado. En orden a morder algo de una forma de la «morder» forma tendría que compartir parte de su frontera con la mordido forma. Esto puede ser incómodo para lograr en la práctica.
Un ejemplo: para restar un círculo de otro círculo, se tendría que crear un «morder» la forma que es la intersección de los dos círculos.
La máscara de enfoque es mucho más universal.
|*| Máscara : se Utiliza para Restar Objetos :
|=> fill=»blanco» => Bloques para mostrar
|=> fill=»black» => Bloques para Eliminar
|=> fill=»blanco» => Poner la Pantalla de Bloque también en el interior de la máscara de etiqueta y relleno blanco
|=> fill=»black» => Poner Quitar el Bloque dentro de la máscara de la etiqueta y de relleno negro
|::| Ejemplo de uso de la mascarilla para eliminar el centro de la pequeña rect de gran rect
|::| Ejemplo de uso de la mascarilla para eliminar el centro de un pequeño círculo de círculo grande :