«« ( Date ) »» // «« ( Thread ) »» // openeda - 2004

Re: par pitanja

by Toplica Tanaskovic
ponedeljak, 15. mart 2004 - 19:39.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dana ponedeljak 15 mart 2004 13:48, Nikola Stojiljkovic je napisao(la):
> ako sam dobro shvatio prvo pravimo editor/konvertor komponenti.
>
> potom sledi editor elektricnih sema... moje pitanje je koje sve
> funkcionalnosti treba da ima ovaj editor? iscrtavanje seme (standarno
> ubacivanje, pomeranje, brisanje... komponenti), stampanje i export net
> liste. jesam li zaboravio na nesto?
>

Jeste, da :)

> iscrtavanje sema, za ovo mi je nekako najprirodnije da se koristi B+
> stablo, gde bi tezine cvorova zapravo bile visine (dubine), na kojima
> se pojedini elementi nalaze. posto B+ stablo omogucava sekvencijalni
> pristup po ovim tezinama, icrtavanje bi bilo lako i brzo. ovde pod
> elementima mislim na komponente, linije, text labele, netlabele...

Da skratim priču, svi vidljivi elementi moraju biti predstavljeni primerkom
neke klase koja je izvedena posredno, ili neposredno iz klase QCanvasItem.
Virtuelni metod draw(QPainter &) nam obezbeđuje da svaki element šeme
iscrtava sebe ispravno bez obzira na čemu (ekran, štampač...). QCanvasItem
obezbeđuje rtti (ili Run Time Type Information), ako nam baš bude trebalo za
nešto. Iz para QCanvas i QCanvasView ćemo izvesti klase i oblikovati ih prema
našim potrebama. Kako QCanvas „sadrži“ sve svoje elemente (QCanvasItem)
njima se lako pristupa preko metoda allItems() koji vraća QCanvasItemList.
Takođe QCanvas poseduje i metod drawArea(const QRect &, QPainter *, bool dbuf
= FALSE) koji iscrtava na QPainter-u samo ono što je ograničeno prvim
parametrom, a ako je dbuf==TRUE, onda radi bez neprijatnog flicker-a, tako da
potreba za izmišljanjem metoda šta kad i kako crtati prestaje.
Bacite malo oko na Qt dokumentaciju i obratite pažnju na Canvas modul.

> ovako stablo bi bilo lako smestiti u fajl i citati iz fajla. prosto bi
> se sekvencijalo (kao kod iscrtavanja) upisivale informacije, a kod
> ucitavanja bi se redom popunjavalo stablo.
>
> ovakva struktura bi bila po mom misljenju odlicna za rad sa fajlovima,
> dodavanjem elemenata i brisanjem elemenata (sa poznatim "tezinama").
> medjutim, ova struktura ne bi resila problem selekcije elementa na
> ekranu. to bi mogli da resimo sa nekom strukturom (npr. predstavljane
> retke matrice ulancanim listama) gde bi svakoj tacki (X,Y)
> koordinatnog sistema pridruzili novu ulancanu listu sa tezinama
> elemenata koje pokrivaju datu tacku. ova matrica se ne bi smestala u
> fajl, vec bi se kao i B+ stablo formirala pri ucitavanju.
>
> znaci u celoj prici, tezina bi bila ujedno i identifikator elementa
> u semi.

U sprezi sa onim iznad, bi išla i interna reprezentacija u memoriji dakle
neka Qt-ova lista, recimo QObjectList izvedena iz QPtrList<QObject> tako da
možemo da se oslonimo na Qt-ove metode pretrage i ostalog. Smatram da ne
treba izmišljati toplu vodu, kad već imamo sve gotovo...

>
> cini mi se da su ove dve strukture dovoljne za kompletan opis
> elektricne seme za editor.
>
> one bi (valjda) bile dovoljne i za lako generisanje net liste.
>
> btw, u kom formatu bi radili export net liste. secam se da je u
> protelu bio spisak od nekoliko desetina formata. koji bi smo mi
> koristili (tj. koji je dovoljan za kompletan opis neke elektricne
> seme)?
>
> kako predstaviti slike komponenti? vektor, bitmapa? bitmapa sa 2 boje
> je najlogicnija zbog brzine iscrtavanja, ali vektor je bolji kad je
> editovanje tih simbola u pitanju. mozda i jedno i drugo? tu bi
> bitmapa bila kao neki bafer za brze iscrtavanje.
>
> autoroute ne pravimo u ovoj v0.1? u svakom slucaju njemu je dovoljna
> net lista da bi napravio semu stampane plocice? ako je tako o njemu
> zasad ne moramo da vodimo racuna...
>

O svemu ovome kasnije...
- --
Pozdrav,
Tanasković Toplica
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFAVd5XtKJqksC6c0sRAppqAKCv1oaabM5E8rffoRk/YLOTVCdzfgCgre26
ppUlpV1ZzYPE5ei3cPwvyyQ=
=Tv/3
-----END PGP SIGNATURE-----