Archief - [C#/Asp.net] Drawing app kinderziektes uitvegen

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
Beste 9 livers!!

Intro

Eerst en vooral sorry voor de huge post die ik hier neer zet.
Het gaat op een tekenprogramma als project voor school, waar nog een paar kleine kinderziektes inzitten die ik met hoop van jullie er volledig kan uitkrijgen. Mijn hoop ligt dus bij jullie.

Het gaat dus over een een Tekenapplicatie waar je 5 vormen moet tekenen(lijn, driehoek, rechthoek, cirkel, ellipse) in dit in 4 kleuren en 4 diktes. Je moet dit kunnen tekenen door middel van punten met de pen.

Vragen:
Rechthoek
Cirkel/Ellips
Openen op een panel

Rechthoek:

Een rechthoek tekenen lukt perfect wanneer mijn 1ste punt boven mijn 2de punt ligt. Maar het zou ook moeten werken wanneer mijn 1ste punt rechts van mijn 2de punt ligt en wanneer mijn 2de punt boven mijn 1ste punt ligt.
(verduidelijkheid op foto hieronder)

1276169665-620.jpg


dit is de code van mijn rechthoek

Code:
using System.Drawing;

namespace Tekenprogramma
{
    public class Rechthoek : Figuur
    {
        public override void Teken(Graphics g)
        {
            g.DrawRectangle(Pen, Punt1.X, Punt1.Y, Punt2.X - Punt1.X, Punt2.Y - Punt1.Y);
        }
    }
}

Weet er iemand een idee hoe ik dit probleem kan oplossen ?

Cirkels/ellips

Volgens het boek die ik heb gekocht om dit project te maken is het tekenen gebasseerd op vierkant/rechthoek, maar mits dat de rechthoek niet zo goed werkt werkt mijn cirkel/ellips ook niet zo goed. Voor de ellips lukt het redelijk goed. De cirkel is met de zelfde code normaal als ellips maar het lukt mij niet om via mijn punten de width en height van me cirkel te verkrijgen zodat ik hem ook kan tekenen zoals bij de rechthoek.

code van de ellips
Code:
using System.Drawing;

namespace Tekenprogramma
{
    public class Ellips : Figuur
    {
        public override void Teken(Graphics g)
        {
            g.DrawEllipse(Pen, Punt1.X, Punt1.Y, Punt2.X - Punt1.X, Punt2.Y - Punt1.Y);
        }
    }
}

vraag 1: Klopt dit voor een ellips te tekenen of is er een betere manier?
Vraag 2: Kan er mij iemand vertellen hoe ik het ombouw voor een cirkel te tekenen

Openen op een panel

Hier zit ik met het probleem. Alles wat getekend word is op een panel. Dus ik zou dit moeten kunnen openen en opslaan. Het probleem is opslaan van een tekstvlak lukt mij maar voor op een panel is mij dit een raadsel.

Code:
private void openenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = @"C:\";
            openFileDialog1.Title = "Selecteer een bestand";
            openFileDialog1.Filter = "Windows Bitmap |*.bmp |JPEG files |*.jpg";
            if (openFileDialog1.ShowDialog() = DialogResult.Cancel)
            {
                plTekenvak.Text = openFileDialog1.FileName;
            }
            else
            {
                plTekenvak.Text = "";
            }

plTekenvlak = de naam van het palet
openFileDialog1 = de naam van de functie uit vb

vraag: je ziet plTekenvak.Text staan maar .Text is voor een text object weet er iemand wat ik daar moet invoegen voor een palet ?


Dit zijn de kinderziektes die nog in mijn project zitten.
Ik hoop dat er mij iemand kan helpen met deze problemen.
Na het afgegeven hebben van mijn project en de punten gekregen te hebben post ik dit op internet zodat iedereen het kan bekijken.

Groetjes

Krueger

Legacy Member
Je eerste vraag, daar zal je het volgende moeten hebben:
Code:
g.DrawRectangle(Pen, Math.Min(Punt1.X, Punt2.X), Math.Min(Punt1.Y, Punt2.Y), Math.Abs(Punt2.X - Punt1.X), Math.Abs(Punt2.Y - Punt1.Y));

Voor het tekenen van een ellips is je code juist.
Voor het tekenen van een cirkel, moeten je derde en vierde argument gelijk zijn. Een cirkel is immers een ellips met de hoogte gelijk aan de breedte. Hoe je die cirkel goed tekent in een rechthoek moet je zelf maar eens proberen :)

Voor het saven van een panel. Je tekent op een panel. De tekst beweren heeft dus totaal geen nut, aangezien er geen tekst staat op je panel. Eigenlijk zou je graphics moeten bewaren, maar dat is onmogelijk. De mooiste manier om dit op te lossen is een lijst met figuren opslaan die getekend zijn. Bij de load moet je dan die lijst opladen en opnieuw tekenen.

Da Turtle

Legacy Member
Sorry dat ik heel je post niet kan doornemen om te antwoorden op je vraag, maar ik kan wel wat commentaar geven. Wat je beschrijft is wel C# en .NET, maar niet ASP.NET. ASP.NET is het deel van het .NET framework om websites te maken met server-side functionaliteit.
Een tweede foutje waar mijn oog op viel is dat die = waarschijnlijk != moet zijn.
Code:
...
if (openFileDialog1.ShowDialog() [B]!=[/B] DialogResult.Cancel) {
...

marpheuz

Legacy Member
Voor de rechthoek en de cirkel ga ik direct morgen vroeg aanpassen wanneer ik de windows tot mijn beschikking heb.

Voor het opslaan van de figuren heb je daar soms een voorbeeld van of een preciezere naam van hoe ik het moet opzoeken ?

Voor het foutje met het = is idd != mijn excuses

marpheuz

Legacy Member
Rechthoek

Ik heb de code in mijn bestand geplakt maar ik krijg een fout op het woord Math, zou dit kunnen liggen aan het feit dat ik met 2008 werk ?

Code:
using System.Drawing;

namespace Tekenprogramma
{
    public class Rechthoek : Figuur
    {
        public override void Teken(Graphics g)
        {
            g.DrawRectangle(Pen, Math.Min(Punt1.X, Punt2.X), Math.Min(Punt1.Y, Punt2.Y), Math.Abs(Punt2.X - Punt1.X), Math.Abs(Punt2.Y - Punt1.Y));

        }
    }
}

fout:

The name 'Math' does not exist in the current context

Openen van panel

Het opslaan en openen zou dit ook mogelijk zijn via Snapshot ?

Krueger

Legacy Member
Schrijf onder " using System.Drawing; " ook eens " using System; "

Ik snap niet juist wat je bedoelt met een een snapshot. Als je echt een soort van screenshot bedoelt: nee.

Een voorbeeld kan ik moeilijk geven om op te zoeken. Hou zelf een list met figuren bij. En telkens de gebruiker een figuur aanmaakt, sla je deze op in de list. Bij het opnieuw opstarten moet je enkel deze list loaden. List saven kan je doen mbv. serialisation

marpheuz zei:
Rechthoek

Ik heb de code in mijn bestand geplakt maar ik krijg een fout op het woord Math, zou dit kunnen liggen aan het feit dat ik met 2008 werk ?

Code:
using System.Drawing;

namespace Tekenprogramma
{
    public class Rechthoek : Figuur
    {
        public override void Teken(Graphics g)
        {
            g.DrawRectangle(Pen, Math.Min(Punt1.X, Punt2.X), Math.Min(Punt1.Y, Punt2.Y), Math.Abs(Punt2.X - Punt1.X), Math.Abs(Punt2.Y - Punt1.Y));

        }
    }
}

fout:

The name 'Math' does not exist in the current context

Openen van panel

Het opslaan en openen zou dit ook mogelijk zijn via Snapshot ?

marpheuz

Legacy Member
De rechthoek is gelukt nu dankjewel !!

Het opslaan en openen ga ik zo laten dan want hoe ik die lijst moet bijhouden is mij een raadsel.

Dankjewel
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