2008-08-14 15 views
15

Próbuję kodować generator przepływu dla języka używającego Ruby.Biblioteka rysunków dla Ruby

Chciałem wiedzieć, czy były jakieś biblioteki, których mogłem użyć do rysowania różnych kształtów dla różnych elementów schematu blokowego i zapisywania tekstu do tych kształtów.

Naprawdę wolałbym nie pisać kodu do rysowania podstawowych kształtów, jeśli mogę pomóc.

Czy ktoś mógłby wskazać mi dokumentację referencyjną z przykładami korzystania z tej biblioteki?

+0

Miałem to samo pytanie, daj mi znać identyfikator coś jest porównywalna do nazw System.Drawing w .NET – Zasz

Odpowiedz

2

Odpowiedź jest prosta, że ​​(w momencie pisania), co chcesz niemal na pewno nie istnieje. Przepraszam!

Jeśli jesteś oparty na systemie Windows, to chciałbym szukać produktu w przestrzeni .NET, gdzie spodziewałbym się, że coś znajdziesz. Prawdopodobnie będziesz musiał zapłacić prawdziwe pieniądze. Przypuszczam, że jeśli jesteś odważny, możesz porozmawiać z nim za pomocą IronRuby.

Ze środowiska innego niż MS miałbym nadzieję na rozwiązanie oparte na języku Java. Jak już wspomniano, w świecie internetowym będziesz mieć nadzieję, że coś jest oparte na JavaScript, lub prawdopodobnie bardziej prawdopodobne, ze świata Flash (a może nawet Silverlight?).

Właściwie, jeśli chcesz zatrzymać się w Ruby i nie przeszkadza pewne ryzyko, Silverlight może być droga - przy założeniu, że rzeczy DLR faktycznie działa (brak doświadczenia tutaj). Ruby - tak jak ja to lubię - prawie nie ma najbardziej dojrzałej struktury GUI.

Aktualizacja: Od napisania tego (około 5 lat temu) sytuacja uległa poprawie - trochę. Chociaż nadal nie jestem świadomy żadnej konkretnej biblioteki rysowania wykresów Ruby, ulepszona jest obsługa dla Graphvizhere (Github) lub przez gem install ruby-graphviz. Odkryłem, że dla prostych wykresów możliwe jest napisanie skryptu bezpośrednio z Ruby.

+2

Niektóre biblioteki nie istnieją dla Ruby. Chociaż musiałbyś pracować tylko z podstawowymi elementami. Jak zauważył Nathan, jest https://rubygems.org/gems/rmagick, ale jest też https://rubygems.org/gems/cairo. Oto prosty samouczek: http://www.hokstad.com/simple-drawing-in-ruby-with-cairo.html. A oto inny, który używa GTK http://zetcode.com/tutorials/rubygtktutorial/cairo/. Musiałbym się zgodzić, że to nie jest najlepsze API, ale to dopiero początek. – Gaston

+4

"Potrzebuję czegoś z Ruby", "Wypróbuj .NET", WTF. – Dorian

+0

@Gaston, szkoda, że ​​nie odpowiedziałaś na to. – Blogueira

3

Wygląda na to, że będziesz ograniczony głównie możliwościami dowolnego agenta użytkownika, dla którego budujesz; jeśli jest to projekt internetowy, możliwości rysowania zależą od przeglądarki. Ponieważ Ruby działa po stronie serwera, potrzebujesz minimum JavaScript, aby umożliwić przeciąganie/powiększanie itp. Istnieje wiele przykładów użycia JavaScriptu do rysowania wektorów (wystarczy google "biblioteka grafiki javascript"), ale wszystkie wymagają kodowania i Nie widziałem żadnej biblioteki, która elegancko to streści.

ImageMagick ma wiązanie ruby ​​o nazwie RMagick (czasami znane pod innymi nazwami, w zależności od repozytorium). (Link) Nie użyłem tego sam, ale wierzę, że zrobi to, czego szukasz. Trzeba będzie zrobić jakieś kodowanie, ale wzdłuż linii

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

Jestem całkowicie pewien, ale sprawdź wiązania cairo dla rubinu. Pango dla tekstu. W tej chwili prowadzę śledztwo i natknąłem się na tę stronę.

17

Zapisz schemat blokowy jako wykres skierowany lub niekierowany w Graphviz. Graphviz ma język, dot, który ułatwia generowanie wykresów. Po prostu wygeneruj plik dot, przeprowadź go przez Graphiviz, a otrzymasz obraz.

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

renderuje jako
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 
} 

renderuje jako
directed

Można kontrolować kształty węzłów i wiele więcej w Graphviz.