Wie komme ich an Eigenschaften von Grafikobjekten?

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Yanbel.

    majachen99 schrieb:

    Ich möchte ein CAD Programm programmieren.
    Das sollte die Überschrift Deines Threads sein.
    Also:
    GraphicsPath ist GUI.
    Trenne Daten und GUI.
    Pack Deine "Rohdaten" in Instanzen entsprechender Klassen mit gemeinsamer Basisklasse.
    In so einer Instanz hast Du dann alle Objekte in einer List(Of WHATEVER), so dass Du sie nach Deinen Bedürfnissen editieren kannst.
    Jede Instanz einer solchen Klasse hat als Output einen GraphicsPath, der dann an der GUI dargestellt wird.
    Wenn dann ein solch Teil angeklickt wird, ermittelst Du, welche Rohdaten-Instanz das ist und hast alle EWlemente so, das Du sie manipulieren kannst.
    (fast) feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier ein CodeBeispiel, wie man es lösen kann. Für komplexere Figuren musst du die Methode anpassen, aber das Prinzip wird dadurch deutlich denke ich.
    Dateien


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Du kannst dir auch dieses Tut antun: OwnerDrawing

    Interaktion mit selbstgezeichneten (ownerdrawn) Figuren ist nämlich ein Riesen-Rattenschwanz an Teilaufgaben - insbesondere bei Figuren verschiedener Art.
    Allerdings musste aus dem Tut auslesen, was für dich relevant ist. Ownerdrawing umfasst sogar noch bisserl mehr, als was ein CAD-Programm erfordert.
    Gerne, ich habe dein Beispiel noch ein wenig skalierbarer gemacht.

    In der angehängten Version findest du ein skalierbares Beispiel für verschiedene Figuren, Umgang mit mehreren Figuren, etc. Hab auch hier nur den Kreis als Beispiel drin, aber du kannst prinzipiell jede mögliche Figur erstellen. Das einzige was du machen musst ist folgendes:

    - die Klasse jeder neuen Figur von von der Klasse Figure erben und nur um die fehlenden Eigenschaften erweitert werden
    - für jede Figure muss eine (mathematische) Funktion implementiert werden, um festzustellen, ob ein Klickpunkt auf der jeweiligen Figur liegt.
    - In alle Select Case-Fälle muss die neue Figure eingetragen werden

    Viel Spaß damit
    Dateien


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Neu

    Das stimmt, aber ich schreibe das Programm ja auch nicht. Ich habe dir lediglich das Prinzip erklärt, wie es funktioniert und wie du ein bisschen mehr Perfomance reinbekommst, indem du For-Schleifen im Paint-Event vermeidest. Aber ich werde hier nicht anfangen deinen Code zu schreiben. Denn den Bereich in dem Kreis auszuschließen, der nicht gefüllt ist, ist gar nicht so trivial wie man glaubt. Zunächst musst du eine Gerade berechnen, die durch den Mittelpunkt des Kreises und durch deinen Klickpunkt verläuft. Dann den richtigen :!: Schnittpunkt (es gibt 2) der Geraden auf dem Kreis berechnen und den Winkel bestimmen. Abgleichen ob StartAngle kleiner und StartAngle + SweepAngel größer ist als der bestimmte Winkel und ob der Abstand des Klickpunktes zum Mittelpunkt innerhalb des Radius und der Breite des Kreises liegt. Ist möglich, aber hatte ich gestern gar keine Lust zu :P :D


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Yanbel“ ()