Archief - [C#] Serialization Pen and shapes

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

marpheuz

Legacy Member
goedenamiddag 9livers.

Ik heb google al helemaal afgezocht naar voorbeelden op een pen en shapes die ik getekend heb moet gaan opslaan.

Ik leg even uit:

Je kan in de applicatie op een palet, 5vormen in 3 diktes en 4 kleuren tekenen.
De bedoeling is dat je na het tekenen het kan opslaan om dan een andere keer bijvoorbeeld verder te tekenen.

ik weet dat ik een soort van bibliotheek moet aanmaken die wanneer iets getekend word de informatie opvraagt.

De informatie die nodig is
- de kleur en de dikte van de Pen
- Welke vorm er getekend is,
- De coordinaten van de punten.

Om een lijn te tekenen heb je 2 punten nodig.

Weet er iemand hoe ik hier aanmoet beginnen of hier toevallig wel een tutorial ooit over gevonden heeft ?

ik heb google afgezocht op "c# serialization pen and shapes"

groetjes marijn

kaketoe

Legacy Member
1 woord: XML

maar da's mijn mening, ik laat het woord graag aan de mensen onder mij.

Cycloon

Legacy Member
Mja XML is ook weer meer werk terwijl serializatie direct ook heel de structuur enzo bewaard. XML krijgt bij mij enkel een voorkeur als er ook andere applicaties die data moeten lezen of er netwerkzaken bij komen kijken.

Wat je gaat serializeren is iets dat je zelf moet uitmaken natuurlijk en hangt volledig af van de structuur die je achter de schermen gebruikt. Ik denk niet dat wij jou zomaar direct kunnen helpen zonder een gerichte vraag.

kaketoe

Legacy Member
Ik ken niet zoveel van serialisatie (moet er nog examen over maken, maar dat komt wel goed :p) maar ik dacht dat dat enkel handig was om over netwerksockets te gooien? (en nog wat dingen...)

Maar ik kan wel begrijp dat je bij freehand-lijnen echt wel een hoop coördinaten moet opslaan en daarvoor kan xml wel wat sloom zijn. Maar ik heb geen idee of dat wel in jouw featurepakket zit.

Zoals Cycloon al zei, iets specifieker graag :)

marpheuz

Legacy Member
na beter onderzoek,

We moeten dus wanneer we een figuur hebben getekend een lijst bijhouden.

lijn,driehoek,cirkel, ellips en rechthoek in 3 diktes en 4 kleuren. tekenen via de pen.

We moeten het dus opslaan in 2 lijnen.
1 lijn die de pen beschrijft en 1 lijn die de vorm beschrijft met zijn coordinaten

P 255 0 0 1 (Pen rood geel blauw dikte)
Vorm 1X 1Y 2X 2Y ((1 van de 5 vormen) coordinaten van punt1 en punt 2

Dit is wat ik van code heb, meer weet ik niet kan iemand de code voor mij nog een beetje aanvullen aub ? ik had een klein deeltje op internet gevonden en kheb de rest aangepast voor al mijn figuren. Daarom staat er ook ergens Figuur maar ik weet niet op wat dit zou bedoeld zijn.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;


namespace Tekenprogramma
{
    class Opslaan
    {
        public void bewaren(string locatie)
        {
            try
            {
                StreamWriter mijnStream = new StreamWreater(locatie);
                for (int teller = 0; teller < figuurLijst.Count; teller++)
                //voor elke figur
                    {
                        if (Figuur[teller] is Lijn)
                        //wanneer de figuur een lijn is, geef "L" weer 
                        {
                        Lijn lijn = (Lijn)Figuur[teller];
                        MyPen pen = lijn.Pen;
                        mijnStream.writeLine("p\t{0}", infoPen(pen));
                        mijnStream.WriteLine("P\t{0}\t{1}\t{2}\t{3}", new object [] {lijn.Punt1.X,lijn.Punt1.Y,lijn.Punt2.X,lijn.Punt2.Y});
                        }

                        else if (Figuur[teller] is Rechthoek)
                        //wanneer de figuur een Rechthoek is, geef "R" weer 
                        {
                            Rechthoek rechthoek = (Rechthoek)figuurLijs[teller];
                            MyPen pen2 = Rechthoek.Pen;
                            mijnStream.writeLine("p\t{0}", infoPen(pen2));
                            mijnStream.WriteLine("P\t{0}\t{1}\t{2}\t{3}", new object[] { rechthoek.Punt1.X, rechthoek.Punt1.Y, rechthoek.Punt2.X, rechthoek.Punt2.Y });
                        }

                        else if (Figuur[teller] is Driehoek)
                        //wanneer de figuur een Driehoek is, geef "D" weer 
                        {
                            Driehoek driehoek = (Driehoek)figuurLijs[teller];
                            MyPen pen3 = Driehoek.Pen;
                            mijnStream.writeLine("p\t{0}", infoPen(pen3));
                            mijnStream.WriteLine("P\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}", new object[] { driehoek.Punt1.X, driehoek.Punt1.Y, driehoek.Punt2.X, driehoek.Punt2.Y, driehoek.Punt3.X, driehoek.Punt3.Y });
                        }

                        else if (Figuur[teller] is Cirkel)
                        //wanneer de figuur een Cirkel is, geef "C" weer 
                        {
                            Cirkel cirkel = (Cirkel)figuurLijs[teller];
                            MyPen pen4 = Rechthoek.Pen;
                            mijnStream.writeLine("p\t{0}", infoPen(pen4));
                            mijnStream.WriteLine("P\t{0}\t{1}\t{2}\t{3}", new object[] { cirkel.Punt1.X, cirkel.Punt1.Y, cirkel.Punt2.X, cirkel.Punt2.Y });
                        }

                        else if (Figuur[teller] is Cirkel)
                        //wanneer de figuur een Ellips is, geef "E" weer 
                        {
                            Ellips ellips = (Ellips)figuurLijs[teller];
                            MyPen pen5 = Ellips.Pen;
                            mijnStream.writeLine("p\t{0}", infoPen(pen5));
                            mijnStream.WriteLine("P\t{0}\t{1}\t{2}\t{3}", new object[] { ellips.Punt1.X, ellips.Punt1.Y, ellips.Punt2.X, ellips.Punt2.Y });
                        }

                    }
            }
        }
    }
}

Krueger

Legacy Member
Serialisatie is zeker niet enkel handig om iets over een netwerk te smijten. Ook om dingen op te slaan in bestanden wordt serialisatie gebruikt. Toen ik jouw Xml las, dacht ik eigenlijk ook dat je serialisatie bedoelde. .Net heeft immers een ingebouwde XMLSerialiser klasse. Als je dus iets moet weg schrijven naar Xml, gebruik dan best die functionaliteit, en zit dat niet allemaal zelf te programmeren.

Ik denk dat je verschillende opties hebt om data op te slaan in dit geval, vb:

- schrijven en lezen naar text files met een Steamwriter en reader; vb: C# Station: Reading and Writing Text Files Schrijf zelf je relevante waarden weg in een text file, en lees ze zelf opnieuw in bij het laden.

- via Xml serialisatie; vb: How to serialize an object to XML by using Visual C&#35; Laat .net alles wegschrijven in xml.

- Via binary serialisatie. Je text file die dan wordt weggeschreven is niet leesbaar, maar deze vorm van serialisatie is wel krachtiger. vb: Object Serialization using C# - CodeProject

kaketoe zei:
Ik ken niet zoveel van serialisatie (moet er nog examen over maken, maar dat komt wel goed :p) maar ik dacht dat dat enkel handig was om over netwerksockets te gooien? (en nog wat dingen...)

Maar ik kan wel begrijp dat je bij freehand-lijnen echt wel een hoop coördinaten moet opslaan en daarvoor kan xml wel wat sloom zijn. Maar ik heb geen idee of dat wel in jouw featurepakket zit.

Zoals Cycloon al zei, iets specifieker graag :)

kaketoe

Legacy Member
Als ik ffe naar je code kijke en als ik lees dat je niet goed weet wat Figuur daar staat te doen dan heb je denk ik nog heel wat denkwerk te doen (waar ik je helaas niet bij kan helpen).

Bij zo van die opgaven is het IMO altijd belangrijk om goede abstractie te maken van het probleem. Met wat ben je precies bezig? Kan je het vereenvoudigen? Ben ik niet iets aan het doen wat al standaard in de API zit? etc...

Ik kan geen C# dus ga ik ook je code niet aanvullen. Maar hier enkele vreemde dingetjes die ik heb opgemerkt:
- Waarom heb je geen Point klasse? Ik weet niet of je een methode .toString kan overwriten, maar dat zou al veel moeite besparen :)
- De tabs zijn jouw keuze, maar ik vind dat lastig werken.
- Wat doet die penInfo() precies? Is het wel nodig dat je alle info uitschrijft bij elke lijn?

Zoals ik het nu zie ben je bezig met een soort van eigen bestandsindeling te schrijven. Geen probleem mee, integendeel zelfs. Maar zorg wel dat je consistent blijft :)
IMO zie ik niet waar je nog een probleem mee hebt? Als je de code begrijpt ben je er denk ik al uit...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan