Obtener un cuadro delimitador de "visualización" para un objeto recortado

Necesito encontrar los límites x e y visibles de un objeto que ha sido recortado, para poder colocar otros objetos a su alrededor. sin embargo, el especulación recalca que getBBox no tiene en cuenta las rutas de los clips, por lo que no puedo usar el cuadro delimitador. ¿Alguna idea de cómo puedo encontrar los límites de visualización para un objeto recortado?

preguntado el 03 de mayo de 12 a las 12:05

1 Respuestas

Crea un oculto <use> elemento que hace referencia a la ruta en clipPath y obtenga el cuadro delimitador de eso. Entonces solo desea la intersección del cuadro delimitador de su objeto y el objeto de uso.

<defs>
  <clipPath id="clipPath">
    <path id="path" ...>
  </clipPath>
</defs>

<use id="clipPathBounds" visibility="hidden" xlink:href="#path"/>

contestado el 30 de mayo de 12 a las 09:05

Esperaba encontrar algo un poco más lateral que esto; calcular una intersección es, en general, difícil. Encontré un largo intercambio en la lista de SVG sobre esto hace un par de días, pero desafortunadamente no puedo encontrarlo en este momento. - EML

Calcular la intersección de dos rectángulos es fácil. resultado.x = max(x, aRect.x); resultado.y = max(y, aRect.y); resultado.ancho = min(XMayor(), aRect.XMayor()) - resultado.x; resultado.altura = min(YMayor(), aRect.YMayor()) - resultado.y; if (result.width < 0 || result.height < 0) { no intersectó en absoluto } Donde XMost() = rect.x + rect.height etc - Roberto Longson

Cierto, pero una ruta de clip puede ser completamente general. Intente calcular la intersección de un Bézier arbitrario con cualquier otra cosa. Incluso si solo desea un resultado rectangular, como lo hago yo, entonces no es trivial. Tiene que hacerlo el renderizador en general, para ordenar los detalles a nivel de píxel, pero SVG no parece definir ninguna forma de hacerlo. - EML

eso es lo que el truco está en la respuesta, para convertir los datos de la ruta arbitraria para un rectángulo. - Roberto Longson

Ahh... lo siento, te entendí completamente mal. Se ve bien, gracias. - EML

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.