2010-03-28 28 views
15

Đồ thị (được hướng dẫn) đại diện cho automata hữu hạn. Cho đến bây giờ chương trình thử nghiệm của tôi đã được viết ra các tập tin chấm để thử nghiệm. Điều này là khá tốt cho cả hai thử nghiệm hồi quy (giữ cho các tập tin đầu ra được xác minh trong lật đổ, hỏi nó nếu đã có một sự thay đổi) và cho hình dung. Tuy nhiên, có một số vấn đề ...Có một thư viện bố trí biểu đồ tốt có thể gọi từ C++ không?

Về cơ bản, tôi muốn một cái gì đó có thể gọi từ C++ và có kế hoạch bố cục cho trạng thái và chuyển tiếp của tôi nhưng để bản vẽ cho tôi - thứ gì đó sẽ cho phép tôi vẽ vẽ trên cửa sổ GUI (wxWidgets).

Tôi cũng muốn có giấy phép cho phép sử dụng thương mại - hiện tại tôi không cần, và tôi có thể phát hành rất tốt dưới dạng nguồn mở, nhưng tôi không muốn giới hạn tùy chọn ATM của mình.

Các vấn đề với GraphViz là (1) cảnh báo về xây dựng từ nguồn trên Windows, (2) tất cả các phụ thuộc không cần thiết cho hiển thị và phân tích cú pháp, và (3) thiếu (được cho là) ​​của một tài liệu API cụ thể và hoàn toàn cho bố trí. Về cơ bản, tôi muốn có thể chỉ định các trạng thái của mình (với kích thước hình chữ nhật bao quanh) và chuyển tiếp và đọc các vị trí cho các trạng thái và điểm tham chiếu cho mỗi lần chuyển đổi, sau đó vẽ dựa trên các tọa độ đó. Tôi đã không thực sự tìm ra cách chú thích về chuyển tiếp nên được xử lý, nhưng cần phải có một số loại dự phòng để xác định kích thước hộp giới hạn cho những người đó, liên kết chúng với các hiệu ứng chuyển tiếp và đọc các vị trí.

Có ai biết thư viện có thể xử lý các yêu cầu đó không?

Tôi không nhất thiết phải chống lại việc thực hiện một cái gì đó cho bản thân mình, nhưng trong trường hợp này tôi muốn tránh nó nếu có thể.

+0

+1 cho câu hỏi tuyệt vời, được nêu rõ. Thật không may, tôi không có câu trả lời. – aib

+0

Boost có các thuật toán đồ thị: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html Tôi cho rằng việc trực quan hóa nằm ngoài phạm vi của nó. –

+0

Có các thuật toán bố cục trong mô-đun đồ thị tăng cường, nhưng tiếc là chúng không phù hợp với đồ thị được chỉ dẫn. Xem phần 22.12 tại đây: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/table_of_contents.html – Kim

Trả lời

0

Mặc dù câu trả lời cho đến nay là giá trị một phiếu bầu tán thành, tôi có thể không thực sự chấp nhận bất kỳ trong số họ tôi đã.

Một điều tôi tìm thấy là AGLO.Mã này là GPL v1, nhưng có các giấy tờ mô tả các thuật toán, do đó cần phải dễ dàng thực hiện lại từ đầu nếu cần.

Ngoài ra còn có giấy của Gansner, Koutsofios, North và Vo - "Kỹ thuật vẽ đồ thị được hướng dẫn" - có sẵn từ here on the Graphviz site.

Tôi cũng đã xem xét kỹ lưỡng giấy phép BSD (nhưng Java) JGraph.

Cách này hay cách khác, có vẻ như tôi có thể đang triển khai lại bánh xe, nếu không thực sự phát minh lại nó.

+0

Mọi người không phải lúc nào cũng có động lực để viết một thay thế BSD cho một thư viện GPL, trừ khi có một ** thực sự ** thị trường thích hợp cho thư viện ở nơi đầu tiên. –

1

Tôi đã xử lý một vấn đề tương tự vào đầu năm nay. Tuy nhiên, một tham số đầu vào quan trọng cho quyết định là số lượng nút mong muốn.

Tôi quyết định sử dụng Trình duyệt làm GUI và do đó đã tìm kiếm các thư viện Javascript đẹp, một trong số đó là wireit, rất phù hợp với bố cục kỹ thuật (và cũng có thể chỉnh sửa bằng cách kéo và thả và "khi đang di chuyển") bố cục). Bạn có thể dễ dàng kết nối đó với C++ của bạn bằng cách chạy một máy chủ web nhỏ trong một chủ đề (Bạn sẽ cần một số loại eventloop/thread thingie cho GUI anyways).

Cũng chỉ 2 xu của tôi.

+0

Điều này kích thích tư duy hơn thực tế. Yêu cầu một máy chủ web là * không * một tùy chọn, nhưng sử dụng một điều khiển HTML với sự hỗ trợ Javascript có thể không được, và có 'cũng là tùy chọn nhúng một công cụ Javascript hoặc đơn giản là dịch mã. +1 một lần nữa. – Steve314

+0

Vâng, tôi nghĩ rằng việc nhúng một máy chủ web dễ dàng hơn việc nhúng một công cụ Javascript (http://code.google.com/p/mongoos/wiki/EmbeddingMongoose). Đặc biệt với việc bao thanh toán mọi thứ liên quan đến đồ họa cho Trình duyệt, bạn tiết kiệm rất nhiều phụ thuộc. Nhưng tôi cũng sẽ không giấu giếm bạn rằng javascript có những điều kỳ quặc riêng. Nhưng tôi nghĩ rằng phát triển GUI trong javascipt + jQuery UI (hoặc một số lib khác) dễ hơn (và dễ bảo trì hơn) - THNX cho +1 – snies

+0

Một nhận xét nữa: Khi sử dụng (X) HTML và JavaScript hiện tại bạn không có giải pháp cho " miễn phí-vẽ "hỗ trợ trên tất cả các thị trưởng Trình duyệt. Mặt khác, nếu bạn hài lòng với việc sử dụng Firefox, Safari, Chrome, Opera (tất cả trừ IE), bạn có thể sử dụng SVG. Graphviz có thể trực tiếp tạo ra đầu ra SVG (hoặc dịch dễ dàng), mà bạn có thể kiểm soát và tạo hiệu ứng trực tiếp qua javascript. Qua đó bạn có thể sử dụng lại một số thiết lập hiện tại của mình. (http://code.google.com/p/svgweb/ cũng cho phép hỗ trợ svg trong IE) – snies

2

OGDF thuộc GPL.

Pigale cũng thuộc GPL.

GoVisual là phần mềm thương mại, nhưng có vẻ như nó bắt đầu từ $ 1800 cho một nhà phát triển.

+0

Lúng túng khi sử dụng thương mại, nhưng +1 có thể không phải là không thể (ví dụ: tách mã GPL thành một nhị phân được liên kết động, tách biệt với mã đóng). – Steve314

+0

Tách mã GPL thành một nhị phân được liên kết động không giúp ích gì. Toàn bộ sự việc vẫn là một công việc có nguồn gốc của mã GPL. –

+0

Thực sự - vì vậy nếu tôi sử dụng mã GPL để viết một plugin Photoshop, toàn bộ Photoshop đột nhiên trở thành một công việc có nguồn gốc của mã GPL? Adobe thực sự sẽ không vui lắm về điều đó! Hay là Adobe không được phép sử dụng mã GPL trong một plugin Photoshop nguồn mở, nhưng tôi? – Steve314

2

Hmm, GDToolkit (hoặc GDT) có vẻ ổn thỏa: nhiều hình ảnh trong số tutorial trông khá đẹp và có vẻ như nó không quá phức tạp để sử dụng.

Edit:.! Nhưng kiểm tra giấy phép, có vẻ như đó là phần mềm thương mại :-(Whoops

+0

Thương mại có thể tốt hơn GPL, tùy thuộc vào chi phí, vì vậy +1 lại. – Steve314

0

Đây là một bộ sưu tập tốt của Graph Libs với so sánh và chức năng tìm kiếm:
http://gvsr.polytech.univ-nantes.fr/GVSR/task?action=browse#

Có lẽ bạn tìm thấy một lib mà phù hợp cho bạn.

+1

Rất tiếc, liên kết này hiện đã chết và dường như không có vị trí mới cho liên kết này. – Kim

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