2008-08-14 31 views
15

Tôi đang cố mã hóa trình tạo sơ đồ cho một ngôn ngữ bằng Ruby.Vẽ Thư viện cho Ruby

Tôi muốn biết liệu có bất kỳ thư viện nào mà tôi có thể sử dụng để vẽ các hình dạng khác nhau cho các phần tử sơ đồ khác nhau và viết văn bản cho các hình dạng đó hay không.

Tôi thực sự không muốn viết mã để vẽ các hình dạng cơ bản, nếu tôi có thể trợ giúp.

Ai đó có thể chỉ cho tôi một số tài liệu tham chiếu có ví dụ về việc sử dụng thư viện đó không?

+0

Tôi có cùng một câu hỏi, Hãy cho tôi biết id có bất kỳ điều gì có thể so sánh với không gian tên System.Drawing trong .net – Zasz

Trả lời

2

Câu trả lời đơn giản là (tại thời điểm viết) những gì bạn muốn gần như chắc chắn không tồn tại. Lấy làm tiếc!

Nếu bạn sử dụng Windows thì tôi sẽ tìm kiếm một sản phẩm trong không gian .NET, nơi tôi hy vọng bạn sẽ tìm thấy thứ gì đó. Bạn có lẽ sẽ phải trả tiền thật mặc dù. Tôi cho rằng, nếu bạn dũng cảm, bạn có thể nói chuyện với nó bằng cách sử dụng IronRuby.

Từ môi trường không phải MS, tôi hy vọng sẽ có giải pháp dựa trên Java. Như đã đề cập, trong thế giới Web, bạn sẽ hy vọng một số thứ dựa trên JavaScript, hoặc có thể nhiều hơn, một cái gì đó từ thế giới Flash (hoặc thậm chí là Silverlight?).

Trên thực tế, nếu bạn muốn ở lại Ruby và không ngại một số rủi ro, Silverlight có thể là một cách để đi - giả sử các công cụ DLR thực sự hoạt động (không có kinh nghiệm ở đây). Ruby - nhiều như tôi thích nó - hầu như không có cấu trúc GUI trưởng thành nhất xung quanh nó.

Cập nhật: Kể từ khi viết bài này (cách đây 5 năm), tình hình đã được cải thiện - một chút. Mặc dù tôi vẫn chưa biết về bất kỳ thư viện vẽ đồ thị Ruby cụ thể nào, có hỗ trợ được cải thiện cho Graphvizhere (Github) hoặc bằng gem install ruby-graphviz. Tôi đã thấy rằng đối với các đồ thị đơn giản, có thể viết kịch bản trực tiếp từ Ruby.

+2

Một số thư viện tồn tại đối với ruby. Mặc dù bạn sẽ phải làm việc chỉ với các yếu tố cơ bản. Như Nathan đã chỉ ra, có https://rubygems.org/gems/rmagick, nhưng cũng có https://rubygems.org/gems/cairo. Đây là một hướng dẫn đơn giản http://www.hokstad.com/simple-drawing-in-ruby-with-cairo.html. Và đây là một ứng dụng khác sử dụng GTK http://zetcode.com/tutorials/rubygtktutorial/cairo/. Tôi sẽ phải đồng ý rằng nó không phải là API tốt nhất, nhưng đó là một sự khởi đầu. – Gaston

+4

"Tôi cần một cái gì đó với Ruby", "Hãy thử .NET", WTF. – Dorian

+0

@Gaston quá tệ, bạn đã không trả lời câu hỏi đó. – Blogueira

3

Có vẻ như bạn sẽ bị giới hạn chủ yếu bởi khả năng của bất kỳ tác nhân người dùng nào bạn đang xây dựng; nếu đây là một dự án web, khả năng vẽ sẽ phụ thuộc vào trình duyệt. Kể từ khi Ruby đang chạy phía máy chủ, bạn sẽ cần một số JavaScript để cho phép kéo/thu nhỏ, v.v. Có rất nhiều ví dụ về JavaScript được sử dụng để vẽ vector (chỉ cần google "thư viện đồ họa javascript"), nhưng tất cả yêu cầu mã hóa và Tôi đã không thấy bất kỳ thư viện nào tóm tắt điều này một cách tao nhã.

ImageMagick có liên kết Ruby được gọi là RMagick (đôi khi được gọi bằng tên khác, tùy thuộc vào kho lưu trữ). (Link) Tôi đã không sử dụng nó bản thân mình, nhưng tôi tin rằng nó sẽ làm những gì bạn đang tìm kiếm. Bạn sẽ cần phải thực hiện một số quy trình mã hóa, nhưng nó nằm dọc theo các dòng của

draw.rectangle(x1, y1, x2, y2) 
draw.polygon(x1, y1,...,xN, yN) 
0

Tôi hoàn toàn chắc chắn, nhưng hãy kiểm tra ràng buộc cairo cho ruby. Pango cho văn bản. Bây giờ tôi đang điều tra và đi qua trang này.

17

Ghi lưu đồ của bạn dưới dạng đồ thị được hướng dẫn hoặc không được hướng dẫn trong Graphviz. Graphviz có một ngôn ngữ, dot giúp dễ dàng tạo biểu đồ. Chỉ cần tạo tệp dấu chấm, chạy nó qua Graphiviz và bạn sẽ có được hình ảnh của mình.

graph { 
    A -- B -- C; 
    B -- D; 
    C -- D [constraint=false]; 
} 

ám như
undirected

digraph { 
    A [label="start"]; 
    B [label="eat"]; 
    C [label="drink"]; 
    D [label="be merry"]; 

    A -> B -> C; 
    C -> D [constraint=false]; 
    B -> D [ arrowhead=none, arrowtail=normal]; // reverse this edge 
} 

ám như
directed

Bạn có thể kiểm soát hình dạng nút và nhiều hơn nữa trong Graphviz.