2012-05-03 19 views
6

Tôi cần phải tìm các giới hạn x và y hiển thị của đối tượng đã được cắt bớt, để tôi có thể đặt các đối tượng khác xung quanh nó. Tuy nhiên, spec nói rằng getBBox không tính đến đường dẫn clip, vì vậy tôi không thể sử dụng hộp giới hạn. Bất kỳ ý tưởng làm thế nào tôi có thể tìm thấy giới hạn hiển thị cho một đối tượng cắt bớt?Nhận hộp giới hạn "hiển thị" cho đối tượng bị cắt

Trả lời

7

Tạo phần tử <use> ẩn tham chiếu đường dẫn trong tệp ClipPath và nhận hộp giới hạn đó. Sau đó, bạn chỉ muốn giao điểm của hộp giới hạn của đối tượng của bạn và đối tượng sử dụng.

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

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

Tôi đã hy vọng tìm được thứ gì đó bên cạnh hơn một chút; tính toán một giao lộ là, nói chung, khó khăn. Tôi đã tìm thấy một trao đổi dài về danh sách SVG về điều này một vài ngày trước, nhưng tiếc là tôi không thể tìm thấy nó vào lúc này. – EML

+0

Tính toán giao điểm của hai hình chữ nhật rất dễ dàng. 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) { không cắt nhau ở tất cả } Ở đâu XMost() = rect.x + rect.height etc –

+0

Đúng, nhưng đường dẫn clip có thể là hoàn toàn chung chung. Thử tính toán giao lộ của Bezier tùy ý với bất kỳ thứ gì khác. Ngay cả khi bạn chỉ muốn có một kết quả hình chữ nhật, như tôi làm, thì nó không tầm thường. Nó phải được thực hiện bởi trình kết xuất nói chung, để sắp xếp chi tiết cấp pixel, nhưng SVG không xuất hiện để xác định bất kỳ cách nào để thực hiện việc này. – EML

Các vấn đề liên quan