read from shapefile and paint

Tags:    grafik

Hej alle
Jeg er vendt tilbage til en opgave med at læse, tegne og skrive shapefiles. Jeg har fået lavet de strukturer der indeholder de data jeg kan læse fra filerne. Strukturerne indeholder nu data om respektivt d2-point, d2-line, d2-polygon og tilsvarende for 3d elementer.
Jeg kunne lave en metode Paint() for hver struktur .. de har hver deres specielle implementering
Paint(byref graphics g, byref painteventargs e){}
Mht performance går det stærkt med at føjte strukturer omkring .. men, hvordan ligger det, hvis de alle sammen skal til at slæbe rundt med sådan en relativ kraftig Paint-metode?

Alternativet kunne være, at lave en klasse shapeElement
Fold kodeboks ind/udCSharp kode 

.. Det kan der ihvertfald komme meget boxing/unboxing ud af, men jeg mangler egentlig en 'homogen base-class' som de forskellige typer kan 'være i', så jeg kan lave en list<base-class> beholder.

Det var måske smartere at lave en utility-class med kun en member Paint() med mange argumenter i favnen .. med der mangler stadigvæk et ordentlig håndtag i strukuren når den skal flyttes rundt.

hm .. er det her at c++'s pointer er den bedre løsning?
Jeg begynder at tro, at jeg undervuderer udfordringen.

Nogen kommentar/input af forskellig slags?



Indlæg senest redigeret d. 17.03.2012 13:37 af Bruger #17086
2 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Den mest objektorienterede måde vil nok være at lave en klasse eller interface som de andre nedarver/implementerer fra. Visse figure er væsentlig forskellige i de informationer de indeholder. En trekant kan generaliseres til en polygon. Men det er 2 forskellige informationer du behøver mellem en ellipse og en polygon f.eks. så der er ikke noget information i den øverste del af dit hierarki der er fælles. Derfor ville jeg nok lave et interface IShape som fortæller hvilken funktionalitet (metoder) som figurer har. Paint er f.eks. en metode som de bør implementere. For at have en liste med figurer kan du lave en list<IShape> shapes.

Hver klasse ved "hvordan den skal tegnes" men ikke "hvordan man specifikt tegner". Så du har en separat klasse/bibliotek til at tegne med, (kan f.eks. bruge Graphics g), som dine forskellige figurer bruger. Noget pseudoagtig kode:
Fold kodeboks ind/udCSharp kode 


Du taber ikke nogen performance ved at have metoder på klassen. I dit eksempel med din switch skal den jo gøre de samme operationer for at tegne figuren, som en klassemetode skal. Fordelen med klassemetoderne er at de ligger logisk på den klasse de hører til.



Indlæg senest redigeret d. 17.03.2012 15:03 af Bruger #14645
Den mest objektorienterede måde vil nok være at lave en klasse eller interface som de andre nedarver/implementerer fra.... Derfor ville jeg nok lave et interface IShape... For at have en liste med figurer kan du lave en list<IShape> shapes.

Det lyder som en ok idé. Jeg tænkte på en baseclass som måske kan det samme med list<baseclass> for objekter der er nedarvet. Min fejl er, at jeg har villet integrere 'data-member' i baseclass/interface .. det ville ikke du fordi 'data' er så forskellig, men der er ingen problem med at vente.

Det er nu godt med lidt feedback inden man ryger ud af en tangent.




t