Potrzebuję znaleźć widoczne krawędzie x i y obiektu, który został obcięty, tak że mogę umieścić wokół niego inne obiekty. Jednak spec stwierdza, że getBBox
nie uwzględnia ścieżek klipu, więc nie mogę używać ramki ograniczającej. Każdy pomysł, w jaki sposób mogę znaleźć ograniczenia wyświetlania obcinanego obiektu?Uzyskiwanie "wyświetlania" obwiedni przyciętego obiektu
6
A
Odpowiedz
7
Utwórz ukryty element <use>
, który odwołuje się do ścieżki w obszarze ClipPath i uzyskaj ograniczenie tego. Następnie potrzebujesz przecięcia ramki ograniczającej obiektu i obiektu użycia.
<defs>
<clipPath id="clipPath">
<path id="path" ...>
</clipPath>
</defs>
<use id="clipPathBounds" visibility="hidden" xlink:href="#path"/>
Miałem nadzieję, że znajdę coś bardziej bocznego niż to; obliczanie przecięcia jest ogólnie trudne. Kilka dni temu znalazłem długą listę na liście SVG, ale niestety nie mogę jej znaleźć w tej chwili. – EML
Obliczanie przecięcia dwóch prostokątów jest łatwe. result.x = max (x, aRect.x); result.y = max (y, aRect.y); result.width = min (XMost(), aRect.XMost()) - result.x; result.height = min (YMost(), aRect.YMost()) - result.y; if (result.width <0 || result.height <0) { nie przecinają się w ogóle } przypadku XMost() = rect.x + rect.height itp –
prawda, ale może być ścieżka zacisk całkowicie ogólny. Spróbuj obliczyć punkt przecięcia dowolnego Beziera z czymkolwiek innym. Nawet jeśli zależy ci jedynie na wyniku w kształcie prostokąta, tak jak ja, to nie jest to łatwe. Musi to być zrobione przez renderer w ogóle, aby posortować szczegóły na poziomie pikseli, ale SVG nie wydaje się, aby definiować w jaki sposób to zrobić. – EML