GDI+: Transparente Linie Zeichnen (2 Pb's Übereinander) -> UserControl?

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von aligator.

    GDI+: Transparente Linie Zeichnen (2 Pb's Übereinander) -> UserControl?

    Hallo zusammen,

    ich habe mir ein Programm geschrieben, mit dem man auf einer Picturebox durch klicken Kurven erstellen und später auch bearbeiten kann. Ich habe es hier mal hochgeladen: fileuploadx.de/670911

    Bedienungsanleitung:
    Spoiler anzeigen

    1. Rechtsklick in Picturebox -> Neue Linie Zeichnen
    2. Durch Klicks auf die Picturebox die Linie zeichnen
    3. Recktsklick -> Linie beenden
    4. Schritt 1-3 solange wiederholen bis alle Linien gezeichnet sind
    5. Rechtsklick -> Linien bearbeiten
    6. in die Nähe der Linie klicken die man bearbeiten möchte -> Tangenten + Stützpunkte werden angezeigt
    7. Linie an den Tangenten oder Stützpunkten verschieben
    8. Rechtsklick -> Bearbeiten beenden


    Die Linien sind in Abschnitte zwischen den Stützpunkten unterteilt. Wenn ich nun einen Stützpunkt oder eine Tangente verschiebe berechne und zeichne ich nur die nötigen Abschnitte neu. Um die "alte Linie" zu löschen, "übermale" ich die sie mit der Hintergrundfarbe der Picturebox. Soweit funktioniert auch alles ganz wunderbar.

    Nun möchte ich aber mit diesen Linien z.B. einen Buchstaben "nachmalen". Wenn ich diesen aber in den Hintergrund der gleichen Picturebox lege wird dieser beim verschieben der Linie übermalt (mit der Hintergrundfarbe der Picturebox)

    Daher dachte ich dass ich den Buchstaben auf eine Picturebox zeichnen könnte, die hinter der liegt, auf der man die Linien zeichnet. Damit man diesen aber sieht müsste der Hintergrund der oberen Picturebox transparent sein und ich müsste die schon vorhandenen Linien mit einer Transparenten Linie übermalen können. Soweit ich bisher weiß ist das mit "einfachen Mitteln" nicht zu machen. Mittels einer UserControl soll es aber anscheinend gehen, aber wie man das dann genau machen muss weiß ich nicht.
    Bei den Beispielen die ich im Internet gefunden habe war meiner Meinung nach nix passendes dabei. Und wenn es ansonsten um Transparenz in einer Picturebox ging, dann immer nur, dass in einer Grafik eine bestimmte Farbe transparent wird.

    Ist dies mit "relativ einfachen" mitteln zu realisieren, oder würdet ihr mir empfehlen auf eine alternative Zeichenmethode umzuschwenken? Dazu wären aber große Änderungen am Programm nötig.

    kleine Zusatzinfo: Ich zeichne und berechne die kurve selbst, da ich am Ende den Verlauf der Kurve als CNC-File für meine Fräse exportieren möchte. Außerdem möchte ich so flexibel sein, dass ich die Stützpunkte als Ecke, Tantential oder Symmetrisch und die Kurvenabschnitte als Kurve oder als Gerade ändern kann. Dies soll später auch noch nachträglich möglich sein.

    Vielen Dank für eure Hilfe / Meinung!

    Gruß
    Marius
    Das ist alles in ner Klassenstruktur abgelegt. Ziemlich umfangreich. Mittels GDI+ alles neu zu zeichnen kommt nicht in Frage, da das hunderte Linien sind und das ein flüssiges Verschieben mehr möglich macht. Die Linien werden in einem MouseMove-Event immer wieder neu berechnet und gezeichnet.
    hmmm, wenns so viele linien sind, dann gehts nicht, des ist klar...
    also mir fällt im mom nichts besseres ein. :(

    man kann zwar den bereich, wo er neuzeichnen soll begrenzen, aber der berich lässt sich nur durch quadrate bestimmen.(soweit ich weiß). ist also nicht möglich bei linien...
    :P Mfg Aligator :P
    Genau das ist mein Problem. Ich hab in den Klassen den Verlauf der Kurve abgelegt, und damit es eben ziemlich rund wird muss man viele zwischenpunkte einfügen. Während dem Verschieben werden zwar die betroffenen Kurvenabschnitte auf 5 Punkte verringert, aber der Rest nicht.

    Nun stellt sich für mich eben die Frage, wie man das am besten lösen kann.
    Mir fallen dazu folgende Möglichkeiten ein:
    1. Eigenes UserControl, das Transparenz unterstützt
    2. Umstieg auf WPF, da es damit anscheinend gehen soll
    3. Wechsel von GDI+ auf eine andere "Grafikengine" die schneller ist (DirectX o.ä.)
    4. ???

    Ich hab von keinem der oben genannten Punkte Ahnung, daher wäre ich froh eure Meinung zu hören, was am besten/einfachsten/produktivsten ist. Ich hab zwar mit VB6 mal was mit DX7 gemacht, aber das ist schon lang her und ich hab hauptsächlich Code aus Tutorials zusammengefügt ;)
    Jedenfalls Verlangen die Punkte 2 und 3 massive änderungen an meinem bisherigen Programm, weil das komplette zeichnen und löschen überarbeitet werden müsste.

    Viele Grüße
    Marius
    also
    1 ist glaub ich nicht so ne tolle lösung
    2 ist des beste, hab ich aber noch nie gemacht.
    3 bei so vielen punkten ist des dann wahrscheinlich auch nicht viel schneller.jedenfalls ist es nicht optimal
    4 :thumbsup: also mit fragezeichen zeichnen kommmst du sicher nicht weit :thumbsup:
    :P Mfg Aligator :P