jakiej klasy użyć?

0

zadając to pytanie jednocześnie przypomina mi się powiedzonko: "So many .NET namespaces… so little time"

Chcę stworzyć programik, w którym będę rysował np coś takiego:

user image

oraz

user image

jestem świeżakiem w C# i .necie, a czas mnie trochę nagli, dlatego byłbym wdzięczny za podpowiedź jaka klasa najbardziej mi się do takich rzeczy przyda.

czy jest jakaś klasa, która umożliwiła by mi potem to co narysuję wyeksportowanie do pdf/png/jpg?

0

Klasa Graphics

0

Oprócz rastrowego rysowania prostokątów, linii i tekstów .NET za bardzo ci nie pomoże. Ale szukając pewnej biblioteki (do automatycznego rysowania grafu) natknąłem się na moduł który robi właśnie to o co pytasz czyli drzewo genealogiczne z możliwością eksportu do PostScript'a. Poszukaj. Nie pamiętam tylko czy to była biblioteka .NET czy natywna, ale jak coś zawsze można sobie wrapper napisać.

0

jeżeli chodzi o samo rozmieszczanie elementów, na razie bym się tym nie przejmował, sądzę, że sam będę w stanie opracować algorytm, który mi w tym pomoże :)

spróbuje zapoznać się też z tym co podrzucił spin, lecz mam jeszcze parę pytań...

na razie na szybko, co zdążyłem sobie w dokumentacji klasę Graphics obejrzeć, to faktycznie pomoże mi ona narysować to co będę potrzebował. Pytanie, czy umożliwi mi ona także zarządzanie tym wszystkim(jak?), tj. bym mógł zrobić PPMa i wyświetlić odpowiednie menu w zależności od tego czy kliknie się na prostokąt reprezentujący daną osobą czy w pusty obszar. Kolejna sprawa, czy da się (a raczej jak to zrobić) by "obszar rysowania" zamknąć w windows formsach? Czyli oprócz samego obszaru rysowania dodać menu itd. (pytam, bo każdy przykład jaki na razie widziałem w dokumentacji był prostym pełnym oknem z obszarem rysowania).

przepraszam za pytania tak niskich lotów...w C# pisałem trochę w konsoli i kilka programów na bardzo popularnych kontrolkach...

0
noisy napisał(a)

jeżeli chodzi o samo rozmieszczanie elementów, na razie bym się tym nie przejmował, sądzę, że sam będę w stanie opracować algorytm, który mi w tym pomoże :)
No to raczej będzie najtrudniejsze zadanie w tym wszystkim.
Z PPM żaden problem, po kliknięciu w obrazek porównujesz współrzędne kliknięcia z tymi w pamięci (sprawdzasz po prostu każdy prostokąt po kolei czy w niego nie trafiono).
A rysować można praktycznie po dowolnym oknie (np. na panelu). W zdarzeniu Paint jest argumentem typu PaintEventArgs, a w nim referencja do Graphics. Oczywiście lepiej malować na jakimś back-buforze i tylko przenosić na panel widoczną część.

Zresztą łatwiej będzie zrobić prostokąty z dynamicznie tworzonych paneli. Wtedy łatwiej umieścić w nich zawartość (wystarczy ustawić własność Text) i od razu wiadomo w co kliknięto. I tego bym się trzymał. Do samodzielnego malowania zostają linie połączeń.

0

sprawdzanie każdego współrzędnych każdego prostokąta, to wg mnie nie jest dobry pomysł. Załóżmy, że w drzewie jest ok 2000 osób. By sprawdzić, czy dane kliknięcie było w dany prostokąt trzeba sprawdzić parę warunków. Nie podoba mi się to, wolę myśleć o optymalizacji już teraz :P

da się jakoś tak zrobić, by stworzyć user control opartą na rzeczach przeze mnie narysowanych (dosłownie narysowanych), którą bym mógł potem wrysować do drzewa z odpowiednimi parametrami? By mogła jakoś sprytnie reagować na zdarzenia itd?

0

Da się. Przeładuj OnPaint aby nadać kontrolce własny wygląd. A sprawdzić 2000 prostokątów to nie tak dużo, milisekundy. Zresztą można je pogrupować w większe obszary - najpierw sprawdzasz który obszar, później szukasz już tylko wśród tego obszaru. Przy 2000 paneli będzie wolniej ale też wystarczająco szybko.

0

mam zamiar potem to przenosić na ASP (choć za wiele jeszcze o tym nie wiem), a ASP jest side server, więc niech będzie takich 200 użytkoników...i już jest dużo liczenia, no ale to na razie schodzi na dalszy plan :)

genrelnie .net mi się podoba, ale jest za duży do ogarnięcia na szybo :)

edit:

tak sobie teraz czytam w dokumentacji

Classes within the System.Drawing namespace are not supported for use within a Windows or ASP.NET service. Attempting to use these classes from within one of these application types may produce unexpected problems, such as diminished service performance and run-time exceptions.

i się zastanawiam...jeżeli w tym będą problemy...do asp jest coś innego?

1 użytkowników online, w tym zalogowanych: 0, gości: 1