Entwickler-Ecke

Multimedia / Grafik - Zeichenprogramm


K_one - Di 01.06.10 16:31
Titel: Zeichenprogramm
Hallo!

Ich möchte ein Programm schreiben, mit dem man geometrische Figuren zeichnen kann. Genau genommen soll es eine Hilfestellung für die Konstruktion sein (so, als würde man es auf dem Papier zeichen) und muss Punkte, Geraden und Kegelschnitte in allen möglichen Lagen darstellen können.

Ich hab mich für C# entschieden (und nicht für Java, was eine schwere Entscheidung war) und habe leider wenig Ahnung von 2D-Darstellungen (also absolut keine 3D-Darstellung!). Das Programm sollte im Grunde ähnlich wie GeoGebra aussehen. Wie stelle ich nun die "Zeichnung" dar? Soll ich DirectX oder XNA verwenden? Oder gibt es dafür bessere Lösungen?

Bedanke mich schon im Vorhinein für Antworten, Vorschläge und Hilfestellungen!

MfG Martin


Kha - Di 01.06.10 18:30

:welcome:

Für GeoGebra-Verhältnisse ist System.Drawing vollkommen ausreichend. Eine Einführung findest du zum Beispiel hier: http://openbook.galileocomputing.de/visual_csharp/visual_csharp_17_001.htm


K_one - Di 01.06.10 21:12

Hi!

Danke! Dann werd ich mich mal damit befassen!
Wenns Probleme gibt werde ich hier posten!

lg Martin


K_one - Mi 02.06.10 00:27

Hallo!

Ich stoße gerade auf mein erstes Problem:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
public partial class DG : Form
    {
        private Bitmap mybtm;
        private Graphics myg;

        public DG()
        {
            InitializeComponent();
        }

        private void draw()
        {
            mybtm = new Bitmap(_widthpx, _heigthpx);
            myg = Graphics.FromImage(mybtm);
            //...... ca. 20 Zeilen Code
            myg.DrawLine(Pens.Black, new Point(020), new Point(2050));
            myg.DrawLine(Pens.Black, new Point(200), new Point(5020));
            pbaxes.Image = mybtm; //pbaxes ist eine PictureBox
            myg.Dispose();
        }
    }

Es fehlt jetzt einiges an Code, aber das Wesentliche ist da.
draw() wird ziemlich oft aufgerufen und irgendwie sind meine 4 GB RAM nach kürzester Zeit voll und das Programm gibt mir eine Fehlermeldung, weil es kein neues Bitmap instanzieren kann.
Was mache ich falsch? Warum füllt sich mein RAM?

lg Martin


danielf - Mi 02.06.10 09:13

Das hatten wir im Forum schonmal. Du musst das image von pbaxes zuerst disposen bevor du das neue zuweist.

Gruß


K_one - Di 22.06.10 18:45

Hi!

Stehe vor meinem nächsten Problem:
Wie realisiere ich, dass Punkte auf meiner Zeichenfläche auf Mouseover (also bei Mouseover fett werden und dann beim Klick ausgewählt werden) reagieren?
Sollte ich eine art Tabelle erstellen, in der immer nachgeprüft wird, ob der Cursor in der Nähe von Punkten ist? Oder gibt es dafür effektivere Lösungen?

Danke! lg


Kha - Di 22.06.10 21:03

Glaube nicht, dass es je zum Flaschenhals wird, die Punkte einfach nacheinander durchzugehen ;) .