2009-06-24 34 views
7

Nhiệm vụ của tôi là phát triển một thuật toán phù hợp với các loại đường cong khác nhau trên một chuỗi điểm nhất định trong không gian 2 chiều.Dựng hình 2D và phóng to với SVG

Để có thể kiểm tra thuật toán của mình, tôi đã chọn SVG để hiển thị kết quả. Tôi có một số vấn đề với nó.

Vì có thể có nhiều đầu vào và đầu ra khác nhau của thuật toán, điều quan trọng là tôi có thể xem các tệp SVG được tạo bằng khả năng phóng to!

Nhưng đường dẫn trong SVG chỉ có thể được hiển thị với chiều rộng nhất định. Nếu tôi phóng to, thì chiều rộng của đường dẫn sẽ rộng hơn. Tôi muốn chiều rộng là ví dụ 1 pixel ở tất cả các mức thu phóng. đó có phải là cách giải quyết?

Ngoài ra: có thể hiển thị điểm SVG không? Vâng, đơn giản, điểm thô. Tôi đã thấy rằng nó có thể không.

Thank

Trả lời

8

Nhiều định dạng vector khác (như PostScript và PDF) sẽ cho phép bạn sử dụng một đột quỵ-width từ 0 cho một "chân tóc" đột quỵ. Không phải như vậy với SVG. Tuy nhiên, tôi nghĩ rằng bạn có thể đạt được những gì bạn muốn nếu bạn sử dụng tỷ lệ phần trăm nét ngang. Xem the w3c SVG specifications for details, nhưng, về cơ bản, bạn sẽ có thể làm điều gì đó như thế này:

stroke-width:"1%" 

này nên đột quỵ đường cong của bạn có chiều rộng dòng đó là một hằng số 1% của hình chữ nhật bounding, bất kể mức độ phóng.

Đối với các điểm, SVG không hỗ trợ chúng. Khi tôi đã làm điều này trong quá khứ (bằng cách sử dụng PostScript) tôi đã luôn luôn sử dụng một arc with a small redius để vẽ một vòng tròn nhỏ (mà bạn có thể điền vào để làm cho một dấu chấm, nếu bạn muốn).


@Zoli: Sau khi bình luận của bạn, tôi sắp đề nghị bạn nhìn vào PostScript, do đó bạn có thể sử dụng chân tóc đột quỵ-width khi tôi đi qua các non-scaling-stroke vector-effect in the SVG specification:

vector-effect="non-scaling-stroke" 

Chỉ cần thêm này để đường cong của bạn và nó sẽ là bất biến để mở rộng quy mô, theo spec. Ví dụ của họ sử dụng line, nhưng nó cũng hoạt động trên các đường cong của bạn.

+0

sử dụng%: quá trình thu phóng cũng mở rộng dòng. – libeako

+0

Cảm ơn bạn vì thuộc tính hiệu ứng vector, nhưng nó không hoạt động như tôi muốn. Nó không bảo vệ chống lại phóng to, chỉ chống lại biến đổi trong tài liệu svg chính nó. Nhưng ngay cả khi không hoạt động, tôi nghĩ vì đây có thể là một tính năng quá mới của SVG - Mozilla Firefox có thể không hỗ trợ nó. – libeako

+0

Tôi tin rằng đó là một tính năng SVG 1.2, nhưng nó thậm chí còn được hỗ trợ trong các cấu hình di động và nhỏ, vì vậy bất kỳ triển khai SVG 1.2 nào cũng nên hỗ trợ nó. Các mô tả từ spec SVG làm cho nó có vẻ như nó cũng làm việc cho phóng to là tốt vì nó chỉ là nghĩa vụ phải render trong bối cảnh thiết bị (tức là không gian màn hình). Bạn đã thử những người xem SVG khác để xem nó hoạt động như thế nào? – Naaff

0

Cảm ơn bạn đã giúp Naaff. Tôi nghĩ rằng tôi sẽ ở lại với firefox, và tôi sẽ chỉ định cho mỗi thuật toán thực hiện chiều rộng dòng trong tập tin svg được tạo ra. Điều đó sẽ phù hợp với tôi.

1

Không có < điểm > yếu tố hoặc bất kỳ thứ gì tương tự như vậy trong SVG hiện tại, nhưng thêm phần đó đã được thảo luận trong SVG WG, vì vậy nó có thể được bao gồm trong tương lai. Vui lòng cho biết nhu cầu và yêu cầu của bạn đối với một yếu tố < điểm > vào danh sách gửi thư công khai của svg: [email protected]

Giải pháp thay thế là sử dụng các yếu tố < dòng > và để chúng có độ dài bằng không, nếu bạn muốn bạn có thể có đường viền tròn để làm cho nó hiển thị một dấu chấm. Tất cả phụ thuộc vào những gì bạn cần. Vòng tròn có r = 0 có thể phù hợp hơn.

Thuộc tính 'hiệu ứng vectơ' có giá trị 'không mở rộng quy mô' là những gì bạn nên sử dụng để nói rằng hành trình không nên mở rộng. Nó không phải là khó khăn để thực hiện một giải pháp javascript đảm bảo đột quỵ được quy mô đúng nếu 'hiệu ứng vector' không được hỗ trợ nguyên bản.Opera 9.5+ hỗ trợ nó nguyên bản.

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