FAQ | Points | Add... | Recent posts | Search | Register | Log in


Program rysujacy wektory - Delphi (jak go napisać ?)


Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Program rysujacy wektory - Delphi (jak go napisać ?)
Author
Message
lukaszzk
Poziom 13
Poziom 13


Joined: 19 May 2007
Posts: 139

Post#1 Post from the author of the topic 15 Sep 2007 15:14   

Program rysujacy wektory - Delphi (jak go napisać ?)


Witam Wszystkich

Na samym początku chciałbym podziękować osobom które pomogą w rozwiązaniu mojego problemu.

Wrzesień już za pasem, nauka się zaczęła a wraz z nią nowe wyzwania i niestety nowe problemy, to tyle tytułem wstępu :-D

Pozwolę sobie teraz przejść do opisania mojego problemu:
Programuje hobbystycznie w Delphi jednak ostatnio postawiono mi nowe wyzwanie.
Jeśli już coś robiłem w Delphi to nie było to na pewno związane z grafiką a mój problem właśnie zahacza o ten piękny dział programowania.

Otóż potrzebuje napisać program rysujący wektory, na początku chciałbym zaznaczyć ze nie musi to być oczywiście jakiś program CAD'owski (to był żart rzecz jasna :-))
Chciałbym aby wektory dało się rysować myszką, tak jak np autokształty w programie MS Word czy Open Office.
Oczywiście wektor powinien być zakończony strzałką, a poza tym wektor powinno dać się:
- przesuwać
- wydłużać
- skracać
- obracać
- zmieniać kąt nachylenia
To by było wszystko jeśli chodzi o opis aplikacji. Po prostu z wektorem powinno się dać robić to wszystko co z normalnym wektorem na papierze. Bardzo ważne jest to aby większość operacji wykonywać za pomocą myszki i ewentualnie menu kontekstowego. Z resztą to znaczy z obliczaniem współrzędnych względnych i bezwzględnych, kątów i długości sądzę że sobie sam powinienem poradzić.

Poniżej zamieszczam kilka ideowych obrazków przedstawiających pracę w programie. Mam nadzieje że za bardzo nie skomplikowałem sprawy właściwie wszystko zawarte jest w temacie.

Wektor aktywny:
Program rysujacy wektory - Delphi (jak go napisać ?)
Przesuwanie końca wektora:
Program rysujacy wektory - Delphi (jak go napisać ?)
Przesuwanie całego wektora:
Program rysujacy wektory - Delphi (jak go napisać ?)
Wektor nieaktywny:
Program rysujacy wektory - Delphi (jak go napisać ?)
Back to top
   
MirekCz
Poziom 22
Poziom 22


Joined: 09 Dec 2004
Posts: 2169
Location: Gdańsk/Poznań

Post#2 15 Sep 2007 16:30helpful post - solution   

Re: Program rysujacy wektory - Delphi


Zapomniałeś tylko napisać w czym dokładnie tkwi problem...
Back to top
   
Google

Google Adsense


Post# 15 Sep 2007 16:30helpful post - solution   





Back to top
   
lukaszzk
Poziom 13
Poziom 13


Joined: 19 May 2007
Posts: 139

Post#3 Post from the author of the topic 15 Sep 2007 18:08   

Re: Program rysujacy wektory - Delphi


Może to będzie straszne ale pisze: w napisaniu aplikacji :-D

Próbowałem coś sam działać ale chyba w ogóle źle zacząłem opierając wszytko o formularz CANVAS, całość była podobna do rysowania w paincie a więc edycja "statyczna" a mi chodzi o "dynamiczną" możliwość tworzenia grafiki a więc przesuwanie obiektu itp. A poza tym nie mogłem w ogóle sobie poradzić z tzw 'uchwytem" to takie małe kółeczka pojawiające sie np przy przesuwaniu autokształtu oraz z samym przesuwaniem obiektu.
Kolejna problem polegał na tym że potrafiłem narysować kreskę a nie wektor.

Niby taka prosta rzecz, to przecież tylko zwykły wektor a jednak sprawia trudności.:|
Back to top
   
MirekCz
Poziom 22
Poziom 22


Joined: 09 Dec 2004
Posts: 2169
Location: Gdańsk/Poznań

Post#4 15 Sep 2007 19:05helpful post - solution   

Re: Program rysujacy wektory - Delphi


Po łebkach opisany algorytm...

1.Rysowanie wektora robisz tak
a)rysujesz kreskę
b)rysujesz trójkąt na końcu (pozycję obliczasz z wykorzystaniem zamiany wartości x/y
c)wypełniasz trójkąt czarnym kolorem
d)jeżeli jest włączona opcja przesuwania wektora to dodatkowo rysujesz 3 kólka (na początku, na środku do przesuwania całego wektora i na końcu)

2.Dane wektorów zapisujesz jako strukturę o np. takich parametrach:

long x1,y1,x2,y2;
x1,y1 to punkt początkowy a x2,y2 to punkt końcowy

ew dalej jakieś dane koloru itp.

Z tej struktury robisz tablicę. Tutaj masz dwie możliwości:
a)Zwykła tablica jednowymiarowa - w tym momencie na starcie musisz zadeklarować ile maksymalnie wektorów będzie można było narysować (ew. można to obejść - za każdym razem gdy tablica zbliży się do wypełnienia inicjalizujesz nową, większą tablicę i kopiujesz tam dane)

b)tzw. linked list(wybacz, wypadła mi polska nazwa) - każda struktura dodatkowo zawiera wskaźnik do poprzedniego/kolejnego elementu i przy pomocy tych wskaźników możesz chodzić po "tablicy". Wskaźniki są alokowane dynamicznie, dlatego jedynym ograniczeniem ilości wektorów jest wolna pamięć

3.W programie robisz np. toolbara z opcjami:
a)dodaj wektor
b)przesuń wektor
c)wykasuj wektor

4.Działanie programu jest zależne od wybranej opcji:

dla a-dodaj wektor
Czekasz aż ktoś kliknie myszą, zapisujesz ten punkt do pamięci, czekasz aż puści klawisz myszy - zapisujesz ten punkt do pamięci
Teraz do tablicy zapisujesz nowy punkt na jej koniec
(w zależności od typu zapisu danych - dla zwykłej tablicy po prostu w pierwsze wolne pole zapisujesz dane do struktury i zwiększasz zmienną określającą liczbę zapisanych wektorów)

dla b-przesuń wektor
Czekasz na kliknięcie myszy następnie przeglądasz listę wektorów (od końca) i porównujesz pozycję myszki z początkiem/środkiem/końcem wektora. Jeżeli trafisz na zaznaczony wektor to obrysuj go innym kolorem i zacznij przesuwać razem z ruchem myszki

dla c - to samo co w b, ale po natrafieniu na zaznaczony wektor po prostu go skasuj (jeżeli masz zwykłą tablicę a nie linked list to będziesz musiał skopiować wszystkie wektory w tablicy za kasowanym wektorem o jedno do przodu, żebyś w tablicy nie miał dziury)

Co do samego rysowania wektorów to przy wywołaniu komendy rysowania przemierz tablicę wektorów od początku do końca i je rysuj wg. pkt.1
Włącz też "double buffering" w okienku bo inaczej wszystko będzie strasznie migało.

Rozszerzeniem aplikacji byłoby dodanie scrollbarów, żebyś mógł oglądać obszar większy niż okno aplikacji i dodanie opcji zoom in/zoom out. W praktyce jest to dużo matematyki (przeliczanie punktu ekranu na punkt w wirtualnym ekranie gdzie są twoje wektory)

Jak masz jakieś bardziej konkretne pytanie to postaram się pomóc.
Najlepiej najpierw przejrzyj tematy:
-tablica
-linked list (trudniej ale bardziej przyszłościowe niż zrobienie tego na tablicy)
-rysowanie GDI
-obsługa myszki
Back to top
   
lukaszzk
Poziom 13
Poziom 13


Joined: 19 May 2007
Posts: 139

Post#5 Post from the author of the topic 15 Sep 2007 19:28   

Re: Program rysujacy wektory - Delphi


Bardzo dziękuję za słowa słowa porady, to dla mnie wiele znaczy.
No to teraz czas na naukę obiecuje odrobić pracę domową i się dokształcić :-) z tablicami miałem już odczynienia, ale takimi rzeczami jak obsługa myszki czy linked list poprostu się nie zajmowałem bo nie były mi potrzebne (może nauczę sie czegoś nowego).
Z góry chciałbym przeprosić za to że czasami mogę milczeć nawet przez tydzień ale cóż zrobić czasami są wyże priorytety a studia potrafią dać w kość dlatego liczę na cierpliwość.
Co do pytań to na pewno jeszcze będzie ich trochę, ale najpierw dokształcę się i postaram coś napisać abyśmy mogli podyskutować na równym poziomie.
Chciałbym jeszcze dodać że docelowo program ma obsługiwać ploter, mam już koncepcje na napisanie programu ale postanowiłem że program musi posiadać graficzny interfejs, na którym widać wszystko jak na dłoni, no bo wiadomo same cyferki zbyt wiele nie mówią a jak ktoś zobaczy kwadrat to już milej się robi. Więc zaczynam od wizualizacji całego procesu a z resztą powinienem sobie poradzić.

Jeszcze raz dziękuje za zainteresowanie moim tematem
Back to top
   
lukaszzk
Poziom 13
Poziom 13


Joined: 19 May 2007
Posts: 139

Post#6 Post from the author of the topic 16 Sep 2007 21:41   

Re: Program rysujacy wektory - Delphi


Poniżej zamieszczam pierwszą, jeszcze bardzo nieudolna wersje programu.
Nie myślałem że całość będzie aż tak skomplikowana, pomimo kilku godzin pracy zbyt wiele nie osiągnąłem.

Na ta chwile podstawowe problemy to:
- kłopot z orientacją na płaszczycie, ponieważ funkcja którą zastosowałem do odczytu pozycji kursora odczytuje współrzędne na ekranie a nie współrzędne tylko na samym formularzu wystarczy przeciągnąć okienko programu i już mamy problem.
Ideałem było by stworzenie w formularzu układu współrzędnych, którego środek znajdował by się w środku formularza i wykonywanie wszystkich operacji względem tego układu.
- dobrze by było aby przy rysowaniu wektora włączyć animację rysowania żeby było widać jak prowadzimy wektor myszką (niewiem w ogóle czy można coś takiego zrealizować w Delphi)
- i takie teoretyczne pytanie jak włączyć double buffering w Delphi



Wektory3.rar
 Description:
 n/a

Download
 Filename:  Wektory3.rar
 Contents:  Wektory3 , Project1.cfg , Project1.dof , Project1.dpr , Project1.exe , Project1.res , Unit1.dcu , Unit1.dfm , Unit1.pas , Unit1.~dfm
See all...
 Filesize:  166.16 KB
 Punkty:  0.00

Back to top
   
xtedek
Poziom 14
Poziom 14


Joined: 25 Dec 2006
Posts: 189
Location: Kutno

Post#7 19 Sep 2007 19:35helpful post - solution   

Re: Program rysujacy wektory - Delphi (jak go napisać ?)


trochę ci to poprawiłem, ale muszę cię skarcić ponieważ nazywanie procedur np ghghjgh to nie jest dobre rozwiązenie.
Zajęło mi to 5min a dodałem ci metodę na rysowanie - przeciągnij wciśniętym lewym przyciskiem na formie, w ogóle to trochę dużo sobie utrudniasz :)

Co do animacji to musisz tutaj zastosować odświeżanie (czyszczenie i powtórne rysowanie wektorów przy MouseMove)
Ogólnie bedziesz musiał zapisywać dane każdego wektora w tablicy, tak jak to napisał mój poprzednik



wektory.rar
 Description:
 n/a

Download
 Filename:  wektory.rar
 Contents:  wektory , Project1.cfg , Project1.dof , Project1.dpr , Project1.exe , Project1.res , Unit1.dcu , Unit1.dfm , Unit1.pas , Unit1.~dfm
See all...
 Filesize:  169.86 KB
 Punkty:  0.00

Back to top
   
Google

Google Adsense


Post# 19 Sep 2007 19:35helpful post - solution   





Back to top
   
lukaszzk
Poziom 13
Poziom 13


Joined: 19 May 2007
Posts: 139

Post#8 Post from the author of the topic 20 Sep 2007 13:37   

Re: Program rysujacy wektory - Delphi (jak go napisać ?)


Dziękuje za pomoc !
To zawsze jakiś maleńki kroczek do przodu, ale zawsze do przodu.
Zgadzam sie z tobą że nazwa "ghghjgh" jest całkiem nie na miejscu, ale poprostu mnie zaskoczyłeś tą informacją, niewiem jak to sie stało ale normalnie to takich rzeczy nie robię - ale przyznaje się do błędu.

Mam jeszcze taka prośbę czy kolega mógłby, zaprezentować jak zrobić animacje przy rysowaniu byłbym wdzięczny za przykładzik obrazujący działanie tej funkcji - oczywiście to jest tylko proźba.
Back to top
   
maciek_slon
Poziom 20
Poziom 20


Joined: 01 Mar 2006
Posts: 983
Location: Warszawa

Post#9 20 Sep 2007 14:42helpful post - solution   

Re: Program rysujacy wektory - Delphi (jak go napisać ?)


A ja podrzucę coś takiego, narazie bez komentarza :-) Pooglądaj, spróbuj rozkminić o co chodzi a potem zadawaj pytania :-)



rysownik.rar
 Description:
 n/a

Download
 Filename:  rysownik.rar
 Contents:  Project1.dpr , Project1.exe , Project1.res , Unit1.dfm , Unit1.pas
See all...
 Filesize:  156.3 KB
 Punkty:  0.00

Back to top
   
Google

Google Adsense


Post# 20 Sep 2007 14:42helpful post - solution   





Back to top
   
Stepel
Poziom 18
Poziom 18


Joined: 28 Sep 2005
Posts: 460
Location: Piaseczno

Post#10 23 Sep 2007 22:33   

Re: Program rysujacy wektory - Delphi (jak go napisać ?)


maciek_slon , spoko rozwiązanie jak na takie rymowanki :) . Oczywiście dodane Form1.DoubleBuffered:=True; eliminuje miganie Kanwy.
Back to top
   
Piotrek_P
Poziom 15
Poziom 15


Joined: 21 Jun 2003
Posts: 204
Location: Jaworzno

Post#11 28 Sep 2007 08:45helpful post - solution   

Re: Program rysujacy wektory - Delphi (jak go napisać ?)


Cześć;

Może to Ci się przyda:
http://www.delphiarea.com/products/simplegraph/
Komponent wygląda dość ciekawie. Chyba sam spróbuję się tym pobawić :D

Pozdrawiam
Piotrek
Back to top
   
lukaszzk
Poziom 13
Poziom 13


Joined: 19 May 2007
Posts: 139

Post#12 Post from the author of the topic 28 Sep 2007 10:04   

Re: Program rysujacy wektory - Delphi (jak go napisać ?)


Dziękuję za informację Piotrek_P, widzę że to dość ciekawy komponent i na pewno mu się przyjrzę z bliska. W przykładowym programie demo, tworzenie grafiki wygląda dość zaawansowanie.
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Programming Generally -> Program rysujacy wektory - Delphi (jak go napisać ?)
Page 1 of 1
Similar topics
Delphi i HPGL. Jak napisać część kodu interpretującą nagłówek? (4)
[Delphi] Jak napisać funkjcę z której będę mógł korzystać? (1)
[Delphi] Jak w Canvasie napisać tekst pionowo (2)
Jak napisać program cat? Jak to napisać w C? (10)
Jak napisać test wyboru w Delphi? (4)
Jaki program napisać w delphi? (11)
Jak napisać program w Delphi bazując na źródle z Tpascala? (8)
Bash program rysujacy romb pusty z parametrami (5)
Jak napisać program do EPROMu? (1)
Jak napisać prosty program ? (10)

Page generation time: 0.299 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed