2012-05-03 24 views
6

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

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"/> 
+0

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

+0

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 –

+0

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

Powiązane problemy